如何使用golang和excelize向现有的Excel工作表添加列?

huangapple go评论146阅读模式
英文:

How do I add columns to an existing excel worksheet using golang and excelize?

问题

我有一些Go代码,它打开一个电子表格,并且对于每一行,使用行中的lanid来查找一些数据。我想将这些派生数据作为表格中的两个新列添加进去。

打开表格并循环遍历所有行是可以的。我只是无法弄清楚如何添加新列。欢迎任何建议。

下面的代码抛出一个错误:

panic: runtime error: index out of range [7] with length 7

就像列还没有被添加一样。

f, e := excelize.OpenFile("apps.xlsx")
if e != nil {
    log.Fatal(err)
}

defer func() {
    if err := f.Close(); err != nil {
        fmt.Println(err)
    }
}()

f.InsertCol("apps", "H")
f.InsertCol("apps", "H")

rows, err := f.GetRows("apps")
if err != nil {
    fmt.Println(err)
    return
}
for _, row := range rows {
    lanid := row[3]
    
    fmt.Print(lanid, "\t")
    fmt.Println()
    node := orgtee.lookup(lanid)
    row[7] = node.title
    row[8] = node.domain
}

请注意,这只是你提供的代码的翻译,我无法提供关于代码的任何帮助或建议。

英文:

I have some go code that opens a spreadsheet and for each row, uses a lanid in the row to lookup some data. I would like to add this derived data as two new columns in the sheet.

Opening the sheet and looping over all the rows works fine. I just can't figure out how to add the new columns. Any suggestions welcome.

The code below throws an error of

panic: runtime error: index out of range [7] with length 7

like the columns haven't been added.

f, e := excelize.OpenFile("apps.xlsx")
if e != nil {
    log.Fatal(err)
}

defer func() {
    if err := f.Close(); err != nil {
        fmt.Println(err)
    }
}()

f.InsertCol("apps", "H")
f.InsertCol("apps", "H")

rows, err := f.GetRows("apps")
if err != nil {
    fmt.Println(err)
    return
}
for _, row := range rows {
    lanid := row[3]
	
    fmt.Print(lanid, "\t")
    fmt.Println()
    node := orgtee.lookup(lanid)
	row[7] = node.title
	row[8] = node.domain
}

答案1

得分: 2

你可以使用SetCellValue函数来设置它。

这是一个示例。

	for i := 1; i < len(rows); i++ {
		f.SetCellValue("apps", "G"+strconv.Itoa(i), "coba1")
		f.SetCellValue("apps", "H"+strconv.Itoa(i), "coba2")
		f.SetCellValue("apps", "I"+strconv.Itoa(i), "coba3")
	}

	rows, err = f.GetRows("apps") // 再次调用GetRows来更新rows的值
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(rows)
英文:

You can set it by SetCellValue function.

This is the example.

	for i := 1; i &lt; len(rows); i++ {
		f.SetCellValue(&quot;apps&quot;, &quot;G&quot;+strconv.Itoa(i), &quot;coba1&quot;)
		f.SetCellValue(&quot;apps&quot;, &quot;H&quot;+strconv.Itoa(i), &quot;coba2&quot;)
		f.SetCellValue(&quot;apps&quot;, &quot;I&quot;+strconv.Itoa(i), &quot;coba3&quot;)
	}

	rows, err = f.GetRows(&quot;apps&quot;) // call GetRows again to update rows value
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(rows)

huangapple
  • 本文由 发表于 2022年2月26日 20:07:40
  • 转载请务必保留本文链接:https://go.coder-hub.com/71276493.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定