在现代数据处理工作中,Excel公式与函数是执行计算、数据分析和业务逻辑的核心工具。手动输入和管理大量公式不仅耗时,且易出错。通过Python自动化插入公式,开发者可批量处理电子表格、动态生成计算逻辑,确保数据处理的准确性与一致性。本文将基于Spire.XLS for Python库,详细介绍如何在工作表中插入各类公式与函数,包括基本运算、内置函数、数组公式、SUBTOTAL、命名范围及实用技巧。
该库提供完整的Excel操作API,支持公式插入、计算执行与文件格式转换。
## 插入基本公式
Excel公式以等号(=)开头,可包含常量、单元格引用、运算符与函数调用。将公式字符串赋值给单元格的Formula属性即可。
- from spire.xls import *
- from spire.xls.common import *
- workbook = Workbook()
- sheet = workbook.Worksheets[0]
- # 设置测试数据
- sheet.Range["B2"].NumberValue = 7.3
- sheet.Range["C2"].NumberValue = 5
- sheet.Range["D2"].NumberValue = 8.2
- # 字符串常量公式
- sheet.Range["B4"].Formula = '="hello"'
- # 算术运算
- sheet.Range["B5"].Formula = "=1+2+3+4+5-6-7+8-9"
- # 乘法与除法
- sheet.Range["B6"].Formula = "=33*3/4-2+10"
- # 绝对引用其他单元格
- sheet.Range["B7"].Formula = "=Sheet1!$B$2"
- # 引用区域并计算平均值
- sheet.Range["B8"].Formula = "=AVERAGE(Sheet1!$B$2:$D$2)"
- workbook.SaveToFile("BasicFormulas.xlsx", ExcelVersion.Version2010)
- workbook.Dispose()
复制代码
关键点:字符串常量用双引号;支持加减乘除与括号优先级;使用$创建绝对引用;冒号指定连续区域。
## 使用内置函数
### 数学与统计函数
- sheet.Range["B1"].Formula = "=Count(3,5,8,10,2,34)" # 统计参数个数
- sheet.Range["B2"].Formula = "=SUM(18,29)" # 求和
- sheet.Range["B3"].Formula = "=AVERAGE(12,45)" # 平均值
- sheet.Range["B4"].Formula = "=MAX(10,30)" # 最大值
- sheet.Range["B5"].Formula = "=MIN(5,7)" # 最小值
- sheet.Range["B6"].Formula = "=ROUND(7,3)" # 四舍五入
- sheet.Range["B7"].Formula = "=SQRT(40)" # 平方根
复制代码
### 日期与时间函数
- sheet.Range["B1"].Formula = "=NOW()"
- sheet.Range["B1"].Style.NumberFormat = "yyyy-MM-DD HH:mm:ss"
- sheet.Range["B2"].Formula = "=DATE(2024,1,15)"
- sheet.Range["B2"].Style.NumberFormat = "yyyy-MM-DD"
- sheet.Range["B3"].Formula = "=TIME(14,30,0)"
- sheet.Range["B3"].Style.NumberFormat = "HH:mm:ss"
- sheet.Range["B4"].Formula = "=YEAR(NOW())"
- sheet.Range["B5"].Formula = "=MONTH(NOW())"
- sheet.Range["B6"].Formula = "=DAY(NOW())"
- sheet.Range["B7"].Formula = "=HOUR(NOW())"
- sheet.Range["B8"].Formula = "=MINUTE(NOW())"
- sheet.Range["B9"].Formula = "=SECOND(NOW())"
复制代码
### 逻辑与条件函数
- sheet.Range["B1"].Formula = '=IF(10>5, "大于", "小于")'
- sheet.Range["B2"].Formula = "=AND(TRUE, TRUE)"
- sheet.Range["B3"].Formula = "=OR(FALSE, TRUE)"
- sheet.Range["B4"].Formula = "=NOT(FALSE)"
复制代码
### 文本处理函数
- sheet.Range["B1"].Formula = '=LEN("Hello World")'
- sheet.Range["B2"].Formula = '=MID("Hello World",7,5)'
- sheet.Range["B3"].Formula = '=VALUE("123")'
复制代码
## 数组公式
数组公式可对多值执行计算,返回单个或多个结果。使用FormulaArray属性替代Formula,并调用CalculateAllValue()确保正确计算。
- sheet.Range["A1"].NumberValue = 1
- sheet.Range["A2"].NumberValue = 2
- sheet.Range["A3"].NumberValue = 3
- sheet.Range["B1"].NumberValue = 4
- sheet.Range["B2"].NumberValue = 5
- sheet.Range["B3"].NumberValue = 6
- sheet.Range["C1"].NumberValue = 7
- sheet.Range["C2"].NumberValue = 8
- sheet.Range["C3"].NumberValue = 9
- # 线性回归分析(数组公式)
- sheet.Range["A5:C6"].FormulaArray = "=LINEST(A1:A3,B1:C3,TRUE,TRUE)"
- workbook.CalculateAllValue()
复制代码
## SUBTOTAL函数
SUBTOTAL支持聚合计算且忽略隐藏行,第一个参数指定类型:1=AVERAGE、2=COUNT、5=MIN、9=SUM等。
- for row in range(1, 4):
- sheet.Range[f"A{row}"].NumberValue = row
- sheet.Range[f"B{row}"].NumberValue = row + 3
- sheet.Range[f"C{row}"].NumberValue = row + 6
- sheet.Range["A5"].Formula = "=SUBTOTAL(1,A1:C3)" # 平均值
- sheet.Range["B5"].Formula = "=SUBTOTAL(2,A1:C3)" # 计数
- sheet.Range["C5"].Formula = "=SUBTOTAL(5,A1:C3)" # 最小值
- workbook.CalculateAllValue()
复制代码
## 命名范围与公式
命名范围可提高公式可读性与可维护性。
- sheet.Range["A1"].Value = "10"
- sheet.Range["A2"].Value = "20"
- namedRange = workbook.NameRanges.Add("SumRange")
- namedRange.RefersToRange = sheet.Range["A1:A2"]
- sheet.Range["C1"].Formula = "=SUM(SumRange)"
- # 也可定义命名公式
- namedFormula = workbook.NameRanges.Add("TotalCalc")
- namedFormula.NameLocal = "=SUM(A1+A2)"
- sheet.Range["C2"].Formula = "TotalCalc"
复制代码
## 实用技巧
### 格式化公式单元格
- sheet.Range["A1"].Formula = "=SUM(B1:B10)"
- sheet.Range["A1"].Style.Color = Color.get_LightYellow()
- sheet.Range["A1"].Style.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.Thin
- sheet.Range["A1"].Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin
复制代码
### 强制计算公式值
- sheet.Range["A1"].NumberValue = 10
- sheet.Range["A2"].NumberValue = 20
- sheet.Range["A3"].Formula = "=A1+A2"
- workbook.CalculateAllValue()
- result = sheet.Range["A3"].Value # 此时为30
- print(f"计算结果: {result}")
复制代码
### 跨工作表引用
使用工作表名称加感叹号语法:
- sheet1 = workbook.Worksheets[0]
- sheet1.Name = "Data"
- sheet2 = workbook.Worksheets.Add("Calculation")
- sheet1.Range["A1"].NumberValue = 100
- sheet1.Range["A2"].NumberValue = 200
- sheet2.Range["A1"].Formula = "=Data!A1+Data!A2"
- workbook.CalculateAllValue()
复制代码
## 总结
本文覆盖了Python自动化Excel公式插入的核心场景:基本算术、各类内置函数、数组公式、SUBTOTAL、命名范围及实用技巧。开发者可借此批量生成复杂计算电子表格、自动化财务模型与数据分析报告,提高数据处理准确性与效率。 |