在我下面的代码中,我使用了 exclize从 Excel 工作表中读取数据的库。
我的问题是,当我只对从几列中获取数据感兴趣时,.GetRows
方法会读取整个工作表。
浏览goDoc我找不到根据列索引或名称为您提供数据的方法。
尽管如此,有没有办法只从选定的几列中读取数据?或者以某种方式限制.GetRows
方法的范围
代码如下:
package main
import (
"fmt"
"github.com/360EntSecGroup-Skylar/excelize"
)
type AllData struct {
Name, Team, SSN string
}
var mapping []AllData
func main() {
fileName := "Blad1"
xlsx, err := excelize.OpenFile(fileName + ".xlsx")
if err != nil {
fmt.Println(err)
return
}
rows := xlsx.GetRows(fileName)
for _, row := range rows[1:] {
mapping = append(mapping, AllData{ Name: row[0] })
}
m := map[string]interface{}{
"Data": mapping,
}
fmt.Println(m["Data"])
}
最佳答案
看起来至少还有几种方法
通过使用行迭代器
rows, err := xlsx.Rows("Sheet1")
if err != nil {
log.Fatal(err)
}
for rows.Next() {
row := rows.Columns()
fmt.Printf("%s\t%s\n", row[1], row[3]) // Print values in columns B and D
}
或者如果你知道确切的范围
n := 10001
for i := 1; i < n; i++ {
b := xlsx.GetCellValue("Sheet1", fmt.Sprintf("B%d", i))
d := xlsx.GetCellValue("Sheet1", fmt.Sprintf("D%d", i))
fmt.Printf("%s\t%s\n", b, d) // Print values in columns B and D
}
我没有查看库的源代码,因此它可能会或可能不会在性能和(或)内存使用方面产生影响。
关于excel - 使用 go 遍历特定的 excel 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52970397/