在下面的代码中,我正在使用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"])
}
答案 0 :(得分:2)
似乎至少还有其他几种方式
通过使用行迭代器
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
}
我没有遍历库的源代码,因此它可能会或可能不会影响性能和(或)内存使用。