tealeg/xlsxライブラリを使ってExcelを読み込むとき、
大抵のサイトの説明では、サンプルを引用している。
例えば、こんなところ
http://pineplanter.moo.jp/non-it-salaryman/2017/06/20/go-read-excel2/
や、こんなところ
https://qiita.com/from_kyushu/items/cf3b4516bb0ab2e830bc
ほかにもいろいろあったけど、まあだいたい同じような感じ
そのソースはこちら
package main
import (
"fmt"
"github.com/tealeg/xlsx"
)
func main() {
excelFileName := "/home/tealeg/foo.xlsx"
xlFile, err := xlsx.OpenFile(excelFileName)
if err != nil {
...
}
for _, sheet := range xlFile.Sheets {
for _, row := range sheet.Rows {
for _, cell := range row.Cells {
text, _ := cell.String()
fmt.Printf("%s\n", text)
}
}
}
}
これを参考に作ってみたけど、ビルドでエラーになる
# command-line-arguments
,プロpグラム名:行:カラム sheet1.Rows undefined (type *xlsx.Sheet has no field or method Rows)
要するに、Rowsというのは、フィールドにも定義されてないし、メソッドもないよ・・・
と言っている。
この説明が書かれたのは2017年でもう3年以上たっているので、変更されたのかと思って、sheet.goを見ると・・・
type Sheet struct {
Name string
File *File
Cols *ColStore
MaxRow int
MaxCol int
Hidden bool
Selected bool
SheetViews []SheetView
SheetFormat SheetFormat
AutoFilter *AutoFilter
Relations []Relation
DataValidations []*xlsxDataValidation
cellStore CellStore
currentRow *Row
}
import (
"fmt"
"log"
"github.com/tealeg/xlsx"
)
func main() {
file, err := xlsx.OpenFile("test.xlsx")
if err != nil {
log.Fatal(err)
}
for _, sheet := range file.Sheets {
for row := 0 ; row < sheet.MaxRow ;row++ {
for col := 0 ; col < sheet.MaxCol ;col++ {
v, err1 := sheet.Cell(row,col)
if err1 != nil {
log.Fatal(err1)
}
fmt.Println(v)
}
}
}
}
