首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用go循环遍历特定的excel列。

使用go循环遍历特定的excel列。
EN

Stack Overflow用户
提问于 2018-10-24 13:34:02
回答 1查看 3.7K关注 0票数 1

在下面的代码中,我使用激昂库从excel表中读取数据。

我的问题是,当我只对从几列中获取数据感兴趣时,.GetRows方法会读取完整的表。

纵观goDoc,我找不到一种基于列索引或名称提供数据的方法。

尽管如此,是否有一种方法只从几个选定的列读取数据?或以某种方式限制.GetRows方法的范围

下面是代码:

代码语言:javascript
复制
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"])
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-24 19:04:48

看起来至少还有几种方法

使用行迭代器

代码语言:javascript
复制
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
}

或者如果你知道确切的范围

代码语言:javascript
复制
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
}

我没有查看库的源代码,所以它可能会或不会在性能和(或)内存使用方面产生影响。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52970397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档