使用openpyxl跨Excel表读写公式值 仅写入公式未获计算结果问题
问题根因
openpyxl本身不具备Excel公式的计算能力,仅支持读写公式的文本内容。你向工作表写入=SUM(I8:I99)公式后,直接读取单元格的.value属性拿到的就是公式本身的字符串,只有当该Excel文件被Office Excel、WPS等具备公式计算能力的表格软件打开并触发计算后,单元格才会存储对应的计算结果。
解决方案
方案1:使用openpyxl的data_only模式(需手动触发一次计算)
该方案不需要额外安装其他库,仅需要多一步手动操作:
- 写完第一个工作簿的公式后先保存关闭,手动用Excel/WPS打开该文件,等待公式计算完成后关闭文件
- 重新使用
data_only=True参数加载该工作簿,此时读取的.value就是计算后的结果
修改后代码示例:
import openpyxl path4 = "Departments - June 29, 2021 to June 29, 2021.xlsx" wb4 = openpyxl.load_workbook(path4) ws5 = wb4.active # 写入公式 ws5['I100'] = "=SUM(I8:I99)" # 先保存并关闭第一个工作簿 wb4.save(path4) wb4.close() # 以data_only模式重新加载,读取计算结果 wb4_calc = openpyxl.load_workbook(path4, data_only=True) ws5_calc = wb4_calc.active Dc1 = ws5_calc['I100'].value # 写入第二个工作簿的逻辑保持不变 path2 = "Daily Financials.xlsx" wb2 = openpyxl.load_workbook(path2) ws6 = wb2["COS"] ws6["CK7"].value = Dc1 wb2.save('Daily Financials.xlsx') wb2.close()
方案2:使用xlwings自动计算(无人工操作,全自动化)
如果需要全程自动化运行,不需要手动打开Excel,可以使用xlwings库,它会调用本地安装的Excel/WPS程序在后台自动完成公式计算:
- 先安装依赖:
pip install xlwings - 代码示例:
import openpyxl import xlwings as xw path4 = "Departments - June 29, 2021 to June 29, 2021.xlsx" # 后台打开Excel,不显示界面 with xw.App(visible=False) as app: wb = app.books.open(path4) ws = wb.sheets.active # 写入公式 ws.range('I100').formula = '=SUM(I8:I99)' # 直接读取计算后的结果 Dc1 = ws.range('I100').value wb.save() wb.close() # 写入第二个工作簿的逻辑保持不变 path2 = "Daily Financials.xlsx" wb2 = openpyxl.load_workbook(path2) ws6 = wb2["COS"] ws6["CK7"].value = Dc1 wb2.save('Daily Financials.xlsx') wb2.close()
注意事项
- 使用
data_only模式时,如果对应Excel文件没有被表格软件打开计算过,读取到的结果会是None - xlwings需要本地设备安装有Office Excel或WPS才能正常运行
内容的提问来源于stack exchange,提问作者obros269
相关产品推荐
相关产品推荐

