设置公式

  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. for idx, row := range [][]interface{}{{"A", "B", "C"}, {1, 2}} {
  9. if err := f.SetSheetRow("Sheet1", fmt.Sprintf("A%d", idx+1), &row); err != nil {
  10. fmt.Println(err)
  11. return
  12. }
  13. }
  14. if err := f.AddTable("Sheet1", "A1", "C2",
  15. `{"table_name":"Table1","table_style":"TableStyleMedium2"}`); err != nil {
  16. fmt.Println(err)
  17. return
  18. }
  19. formulaType := excelize.STCellFormulaTypeDataTable
  20. if err := f.SetCellFormula("Sheet1", "C2", "=SUM(Table1[[A]:[B]])",
  21. excelize.FormulaOpts{Type: &formulaType}); err != nil {
  22. fmt.Println(err)
  23. return
  24. }
  25. if err := f.SaveAs("Book1.xlsx"); err != nil {
  26. fmt.Println(err)
  27. }
  28. }