excel - 使用 go 遍历特定的 excel 列

标签 excel go

在我下面的代码中,我使用了 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/

相关文章:

go - 如何停止协程

pointers - 如何使用指向该 slice 的指针获取 slice 项

csv - 如何读取 gzip 压缩的 CSV 文件?

mongodb 获取最后 30 分钟前插入的项目

excel - 如何在Excel中创建包含数据点的条形图?

vba - 使用 Excel VBA 从当前 Internet Explorer 浏览器 session 下载 PDF?

excel - 在露天阅读pdf文件

go - 如何在go模块中使用生成的protobuf包?

excel - 如何编写 VBA 脚本来删除包含某个字符串的范围内的所有单元格?

excel - 查找值在哪个(多个)列表中