Python实现读取、修改和计算 Excel 公式的示例详解
作者:SunnyDays1011
Excel 公式在计算、数据统计和自动化处理时非常重要。如果在操作 Excel 文件时,能用程序来读取、修改和计算公式,不仅能节省大量时间,还能保证计算结果准确,避免人工操作带来的错误。
这篇文章将详细介绍如何使用 Python 处理 Excel 公式:从创建带公式的Excel文件、到读取已有公式,再到修改公式并计算结果,帮助你全面掌握 Excel 与 Python 的结合应用。
处理 Excel 公式的 Python 库
要在 Python 中操作 Excel 公式,需要一个能够完整处理公式读写和计算的库。虽然 openpyxl 等开源库可以完成基础的公式写入和读取,但其对复杂函数的支持有限,且无法在 Python 内部直接计算公式结果。
这篇文章将使用 Free Spire.XLS for Python 库演示如何以编程方式处理Excel公式。它是一个免费的 Python Excel 库,支持包括 .xls、.xlsx、.xlsm, .xlsb, .ods, .et 在内的多种文件格式,并内置计算引擎,可直接在 Python 中完成数百种 Excel 函数的计算,无需依赖 Microsoft Excel。
安装方式
在终端中运行以下命令,从 PyPI 安装 Free Spire.XLS for Python:
pip install spire.xls.free
安装完成后,在 Python 脚本中导入库以访问该库的类和方法:
from spire.xls import *
步骤 1:使用 Python 生成带公式的 Excel 文件
为了演示如何在 Python 中读取、修改和计算 Excel 公式,我们先创建一个包含真实数据的 Excel 工作簿。这个工作簿里包含产品信息、数量、单价、折扣,以及一些常用公式,比如算术运算、SUM 和 AVERAGE。
通过程序生成Excel 文件,你可以直接运行示例,清楚看到公式的计算结果,而无需手动准备数据。
实现代码如下:
from spire.xls import *
# 创建新工作簿
workbook = Workbook()
# 获取第一个工作表
sheet = workbook.Worksheets[0]
sheet.Name = "销售数据" # 设置工作表名称
# 添加表头并设置样式
headers = ["产品", "数量", "单价", "折扣 (%)", "小计", "折后总价"]
for col, header in enumerate(headers, start=1):
cell = sheet.Range[1, col]
cell.Text = header
cell.Style.Font.IsBold = True
cell.Style.HorizontalAlignment = HorizontalAlignType.Center
cell.Style.Color = Color.FromRgb(200, 200, 250)
# 添加示例数据并设置对齐方式
data = [
("键盘", 10, 25, 5, "", ""),
("鼠标", 15, 12, 0, "", ""),
("显示器", 8, 150, 10, "", "需检查"),
("USB 数据线", 20, 5, 0, "", ""),
("笔记本包", 5, 40, 15, "", "")
]
for row, row_data in enumerate(data, start=2):
for col, value in enumerate(row_data, start=1):
cell = sheet.Range[row, col]
if isinstance(value, (int, float)):
cell.NumberValue = value
if col > 1:
cell.Style.HorizontalAlignment = HorizontalAlignType.Right
else:
cell.Text = value
cell.Style.HorizontalAlignment = HorizontalAlignType.Left
# 添加计算公式
for i in range(2, 7):
sheet.Range[f"E{i}"].Formula = f"=B{i}*C{i}"
sheet.Range[f"F{i}"].Formula = f"=E{i}*(1-D{i}/100)"
# 添加总计和平均值
sheet.Range["E7"].Formula = "=SUM(E2:E6)"
sheet.Range["F7"].Formula = "=SUM(F2:F6)"
sheet.Range["E8"].Formula = "=AVERAGE(E2:E6)"
sheet.Range["F8"].Formula = "=AVERAGE(F2:F6)"
# 高亮显示总计和平均值
for cell_address in ["E7", "F7", "E8", "F8"]:
cell = sheet.Range[cell_address]
cell.Style.Font.IsBold = True
cell.Style.Color = Color.FromRgb(220, 230, 241)
# 计算所有公式
sheet.CalculateAllValue()
# 设置所有行高
for row in range(1, sheet.LastRow + 1):
sheet.Rows[row - 1].RowHeight = 15
# 设置所有列宽
for col in range(1, sheet.LastColumn + 1):
sheet.Columns[col - 1].ColumnWidth = 10
# 保存工作簿
workbook.SaveToFile("公式.xlsx", ExcelVersion.Version2016)
workbook.Dispose()运行以上代码,得到一个包含公式的 Excel 文件,如下图所示:

步骤 2:使用 Python 读取 Excel 公式
当你收到别人制作的 Excel 文件,想确认公式是否正确或覆盖了所有计算逻辑时,就需要读取这些公式。
你可以遍历工作表的已用单元格,通过 HasFormula 属性判断哪些单元格包含公式。对于每个含有公式的单元格,使用 Formula 属性获取公式,再通过 FormulaValue 属性获取公式的计算结果。这样,就能清楚地了解 Excel 中各个公式的实际计算情况。
实现代码如下:
from spire.xls import *
# 创建工作簿对象
workbook = Workbook()
# 加载现有 Excel 文件
workbook.LoadFromFile("公式.xlsx")
# 获取第一个工作表
sheet = workbook.Worksheets[0]
# 获取工作表中已用的单元格范围
usedRange = sheet.AllocatedRange
print("=== 读取现有公式 ===")
# 遍历已用范围内的所有单元格
for cell in usedRange:
if cell.HasFormula:
print(f"单元格 {cell.RangeAddressLocal} 公式: {cell.Formula}")
print(f"计算结果: {cell.FormulaValue}")
# 释放工作簿资源
workbook.Dispose()输出结果与示例 Excel 文件中各公式及其计算结果一致:

步骤 3:在 Python 中修改和计算 Excel 公式
如果需要更新现有公式,只需要将新的公式表达式赋值给相应单元格的Formula属性。修改完成后,需要调用 CalculateAllValue() 方法重新计算工作表中的公式,这样可以确保所有计算结果都是最新且准确的。
实现代码如下:
from spire.xls import *
# 加载现有工作簿
workbook = Workbook()
workbook.LoadFromFile("公式.xlsx")
# 访问第一个工作表
sheet = workbook.Worksheets[0]
# 更新现有数据
sheet.Range["C2"].NumberValue = 27 # 修改键盘单价
sheet.Range["D4"].NumberValue = 12 # 修改显示器折扣
# 修改现有公式
sheet.Range["F6"].Formula = "=E6*(1-D6/100)+5" # 笔记本包增加额外费用
# 添加新公式
sheet.Range["G2"].Formula = "=C2*B2*0.1" # 示例:小计的 10% 佣金
# 在工作表级别重新计算所有公式
sheet.CalculateAllValue()
print("=== 更新公式 ===")
# 获取并打印更新后的值
print(f"键盘折后总价 (F2): {sheet.Range['F2'].FormulaValue}")
print(f"显示器折后总价 (F4): {sheet.Range['F4'].FormulaValue}")
print(f"笔记本包折后总价(含额外费用)(F6): {sheet.Range['F6'].FormulaValue}")
print(f"新增佣金 (G2): {sheet.Range['G2'].FormulaValue}")
# 保存更新后的工作簿
workbook.SaveToFile("更新公式.xlsx", ExcelVersion.Version2016)
workbook.Dispose()代码说明:
- NumberValue – 更新单元格中的数值。
- Formula – 读取或为单元格设置公式。
- CalculateAllValue() – 重新计算公式,可在以下对象上调用:
- CellRange – 仅计算该单元格(依赖单元格不更新)。
- Worksheet – 计算当前工作表中所有公式。
- Workbook – 计算工作簿中所有工作表的公式。
- FormulaValue – 获取公式的计算结果。
为了确保准确性,推荐在工作表或工作簿级别进行计算,因为单个单元格重新计算不会自动更新依赖公式。
附加:Free Spire.XLS for Python 与 openpyxl 公式处理比较
在 Python 中处理 Excel 公式时,应选择既支持读取又能准确计算公式的库。以下是 Free Spire.XLS for Python 与 openpyxl 的对比:
| 特性 | Free Spire.XLS for Python | openpyxl |
| 公式支持 | 支持广泛的算术、逻辑、文本、日期、财务函数及复杂表达式 | 仅支持写入公式 |
| 公式计算 | 内置计算引擎,可直接计算,无需 Excel | 无内部计算,需要 Excel 或第三方计算 |
| 文件格式兼容 | 支持 .xls, .xlsx, .xlsm, .xlsb,保持公式完整性 | 仅支持 .xlsx, .xlsm,不支持旧版 .xls |
| 跨平台 | Windows、macOS、Linux | 纯 Python,轻量跨平台 |
综上,如果需要在 Python 中完整操作 Excel 公式并进行自动计算,Free Spire.XLS for Python 是更全面的选择。
到此这篇关于Python实现读取、修改和计算 Excel 公式的示例详解的文章就介绍到这了,更多相关Python操作Excel公式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
