使用电子表格管理
使用电子表格管理
使用电子表格管理
本指南逐步讲解构建和修改电子表格的日常操作:创建工作簿、写入单元格值、添加公式、构建表格以及导出为 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。
常见问题
| Issue | Cause | 修复 |
|---|---|---|
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 之间转换 |