使用电子表格管理

使用电子表格管理

使用电子表格管理

本指南逐步讲解构建和修改电子表格的日常操作:创建工作簿、写入单元格值、添加公式、构建表格以及导出为 CSV。


创建工作簿并写入单元格

NewWorkbook() 返回一个已包含一个工作表的工作簿。使用 Cells().Set(ref, value) 写入值:

wb := cells_foss.NewWorkbook()
ws := wb.Worksheets[0]

ws.Cells().Set("A1", "Item")
ws.Cells().Set("B1", "Category")
ws.Cells().Set("C1", "Price")
ws.Cells().Set("A2", "Widget A")
ws.Cells().Set("B2", "Gadgets")
ws.Cells().Set("C2", 12.99)

wb.Save("outputfiles/inventory.xlsx")

读取单元格

Cells().Get(ref) 返回该引用的 *Cell,如果引用无效则返回错误:

wb := cells_foss.NewWorkbook()
ws := wb.Worksheets[0]
ws.Cells().Set("C2", 12.99)

cell, err := ws.Cells().Get("C2")
if err != nil {
	fmt.Printf("Error: %v\n", err)
	return
}
fmt.Printf("C2 = %v\n", cell.Value)

当需要遍历整张工作表时,使用 Cells().All() 来枚举集合中所有已填充的单元格。

添加公式

Cell.SetFormula 在单元格中存储公式字符串。先使用 Set 创建单元格,然后附加公式——公式在打开时由 Excel 或 LibreOffice 计算,而不是由库计算:

wb := cells_foss.NewWorkbook()
ws := wb.Worksheets[0]

ws.Cells().Set("D2", nil)
cell, _ := ws.Cells().Get("D2")
cell.SetFormula("C2*2")

在数据上构建表格

一旦填充了数据范围,Worksheet.AddTable 会将其转换为结构化、具名的表格:

wb := cells_foss.NewWorkbook()
ws := wb.Worksheets[0]
ws.Cells().Set("A1", "Item")
ws.Cells().Set("A2", "Widget A")

tbl := ws.AddTable("A1:C2")
tbl.HasHeaderRow = true
tbl.StyleName = "TableStyleMedium6"
fmt.Printf("Created table %q covering %s\n", tbl.Name, tbl.Range)

导出为 CSV

Workbook.ExportToCSV 将指定的工作表索引写入 CSV 文件,使用您选择的分隔符:

wb := cells_foss.NewWorkbook()

if err := wb.ExportToCSV(0, "outputfiles/inventory.csv", ','); err != nil {
	fmt.Fprintf(os.Stderr, "Error exporting: %v\n", err)
	os.Exit(1)
}

相反方向,Workbook.ImportFromCSV(path, sheetName, delimiter),会将 CSV 文件读取到具名工作表中。

删除单元格

Cells().Remove(ref) 清除单元格的值:

wb := cells_foss.NewWorkbook()
ws := wb.Worksheets[0]
ws.Cells().Set("A2", "Widget A")

if err := ws.Cells().Remove("A2"); err != nil {
	fmt.Printf("Error removing cell: %v\n", err)
}

提示与最佳实践

  • 在对其调用 SetFormula 之前,使用 Set 创建一个单元格 — SetFormula 在已有的 *Cell 上操作,而不是在裸引用字符串上。
  • 在导出包含多个工作表的工作簿时,ExportToCSV 的 sheet index 参数决定导出哪个工作表 — 索引 0 为第一个工作表。
  • 使用 Cells().All() 对整张工作表进行读取密集型迭代,而不是在对每个可能的引用进行循环时调用 Get

常见问题

IssueCause修复
SetFormula 没有效果在从未先使用 Set 创建的单元格引用上调用调用 ws.Cells().Set(ref, nil) 创建单元格,然后对其执行 Get,再调用 SetFormula
CSV 导出为空或工作表错误传递给 ExportToCSV 的工作表索引错误确认索引与 Workbook.Worksheets 中目标工作表的位置相匹配
Get 返回错误集合中不存在该单元格引用。确认引用之前已使用 Set 设置,或显式处理“not found”情况

FAQ

Cells().Remove 会删除整行或整列吗?

不 — 它在给定的引用处清除单元格的值。

我可以在已经有公式列的范围上创建表格吗?

是的 — AddTable 按照书写的单元格范围操作;范围内的公式会被保留。


API Reference 摘要

类 / 方法描述
Workbook.NewWorkbook创建一个包含单个工作表的新工作簿
Cells.Set / Get / Remove / All写入、读取、移除和枚举单元格
Cell.SetFormula / GetFormula附加并读取公式字符串
Worksheet.AddTable在单元格范围上构建结构化表格
Workbook.ExportToCSV / ImportFromCSV在 XLSX 与 CSV 之间转换

另请参阅

 中文