设置公式
func (f *File) SetCellFormula(sheet, cell, formula string, opts ...FormulaOpts) error
根据给定的工作表名和单元格坐标设置该单元格上的公式。公式的结果可在工作表被 Office Excel 应用程序打开时计算,或通过 CalcCellValue 函数计算单元格的值。若 Excel 应用程序打开工作簿后未对设置的单元格公式进行计算,请在设置公式后调用 UpdateLinkedValue 清除单元格缓存。
- 例1,为名为
Sheet1
的工作表A3
单元格设置普通公式=SUM(A1,B1)
:
err := f.SetCellFormula("Sheet1", "A3", "=SUM(A1,B1)")
- 例2,为名为
Sheet1
的工作表A3
单元格设置一维纵向常量数组(列数组)公式1;2;3
:
err := f.SetCellFormula("Sheet1", "A3", "={1;2;3}")
- 例3,为名为
Sheet1
的工作表A3
单元格设置一维横向常量数组(行数组)公式"a","b","c"
:
err := f.SetCellFormula("Sheet1", "A3", "={\"a\",\"b\",\"c\"}")
- 例4,为名为
Sheet1
的工作表A3
单元格设置二维常量数组公式{1,2;"a","b"}
:
formulaType, ref := excelize.STCellFormulaTypeArray, "A3:A3"
err := f.SetCellFormula("Sheet1", "A3", "={1,2;\"a\",\"b\"}",
excelize.FormulaOpts{Ref: &ref, Type: &formulaType})
- 例5,为名为
Sheet1
的工作表A3
单元格设置区域数组公式A1:A2
:
formulaType, ref := excelize.STCellFormulaTypeArray, "A3:A3"
err := f.SetCellFormula("Sheet1", "A3", "=A1:A2",
excelize.FormulaOpts{Ref: &ref, Type: &formulaType})
- 例6,为名为
Sheet1
的工作表C1:C5
区域的单元格设置共享公式=A1+B1
,其中C1
为主单元格:
formulaType, ref := excelize.STCellFormulaTypeShared, "C1:C5"
err := f.SetCellFormula("Sheet1", "C1", "=A1+B1",
excelize.FormulaOpts{Ref: &ref, Type: &formulaType})
- 例7,为名为
Sheet1
的工作表C2
单元格设置表格公式=SUM(Table1[[A]:[B]])
:
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
func main() {
f := excelize.NewFile()
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
for idx, row := range [][]interface{}{{"A", "B", "C"}, {1, 2}} {
if err := f.SetSheetRow("Sheet1", fmt.Sprintf("A%d", idx+1), &row); err != nil {
fmt.Println(err)
return
}
}
if err := f.AddTable("Sheet1",
&excelize.Table{
Range: "A1:C2",
Name: "Table1",
StyleName: "TableStyleMedium2",
}); err != nil {
fmt.Println(err)
return
}
formulaType := excelize.STCellFormulaTypeDataTable
if err := f.SetCellFormula("Sheet1", "C2", "=SUM(Table1[[A]:[B]])",
excelize.FormulaOpts{Type: &formulaType}); err != nil {
fmt.Println(err)
return
}
if err := f.SaveAs("Book1.xlsx"); err != nil {
fmt.Println(err)
}
}