设置公式

  1. func (f *File) SetCellFormula(sheet, cell, formula string, opts ...FormulaOpts) error

根据给定的工作表名和单元格坐标设置该单元格上的公式。公式的结果可在工作表被 Office Excel 应用程序打开时计算,或通过 CalcCellValue 函数计算单元格的值。若 Excel 应用程序打开工作簿后未对设置的单元格公式进行计算,请在设置公式后调用 UpdateLinkedValue 清除单元格缓存。

  • 例1,为名为 Sheet1 的工作表 A3 单元格设置普通公式 =SUM(A1,B1)
  1. err := f.SetCellFormula("Sheet1", "A3", "=SUM(A1,B1)")
  • 例2,为名为 Sheet1 的工作表 A3 单元格设置一维纵向常量数组(列数组)公式 1;2;3:
  1. err := f.SetCellFormula("Sheet1", "A3", "={1;2;3}")
  • 例3,为名为 Sheet1 的工作表 A3 单元格设置一维横向常量数组(行数组)公式 "a","b","c":
  1. err := f.SetCellFormula("Sheet1", "A3", "={\"a\",\"b\",\"c\"}")
  • 例4,为名为 Sheet1 的工作表 A3 单元格设置二维常量数组公式 {1,2;"a","b"}:
  1. formulaType, ref := excelize.STCellFormulaTypeArray, "A3:A3"
  2. err := f.SetCellFormula("Sheet1", "A3", "={1,2;\"a\",\"b\"}",
  3. excelize.FormulaOpts{Ref: &ref, Type: &formulaType})
  • 例5,为名为 Sheet1 的工作表 A3 单元格设置区域数组公式 A1:A2:
  1. formulaType, ref := excelize.STCellFormulaTypeArray, "A3:A3"
  2. err := f.SetCellFormula("Sheet1", "A3", "=A1:A2",
  3. excelize.FormulaOpts{Ref: &ref, Type: &formulaType})
  • 例6,为名为 Sheet1 的工作表 C1:C5 区域的单元格设置共享公式 =A1+B1,其中 C1 为主单元格:
  1. formulaType, ref := excelize.STCellFormulaTypeShared, "C1:C5"
  2. err := f.SetCellFormula("Sheet1", "C1", "=A1+B1",
  3. excelize.FormulaOpts{Ref: &ref, Type: &formulaType})
  • 例7,为名为 Sheet1 的工作表 C2 单元格设置表格公式 =SUM(Table1[[A]:[B]]):
  1. package main
  2. import (
  3. "fmt"
  4. "github.com/xuri/excelize/v2"
  5. )
  6. func main() {
  7. f := excelize.NewFile()
  8. defer func() {
  9. if err := f.Close(); err != nil {
  10. fmt.Println(err)
  11. }
  12. }()
  13. for idx, row := range [][]interface{}{{"A", "B", "C"}, {1, 2}} {
  14. if err := f.SetSheetRow("Sheet1", fmt.Sprintf("A%d", idx+1), &row); err != nil {
  15. fmt.Println(err)
  16. return
  17. }
  18. }
  19. if err := f.AddTable("Sheet1",
  20. &excelize.Table{
  21. Range: "A1:C2",
  22. Name: "Table1",
  23. StyleName: "TableStyleMedium2",
  24. }); err != nil {
  25. fmt.Println(err)
  26. return
  27. }
  28. formulaType := excelize.STCellFormulaTypeDataTable
  29. if err := f.SetCellFormula("Sheet1", "C2", "=SUM(Table1[[A]:[B]])",
  30. excelize.FormulaOpts{Type: &formulaType}); err != nil {
  31. fmt.Println(err)
  32. return
  33. }
  34. if err := f.SaveAs("Book1.xlsx"); err != nil {
  35. fmt.Println(err)
  36. }
  37. }