You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用openpyxl跨Excel表读写公式值 仅写入公式未获计算结果问题

问题根因

openpyxl本身不具备Excel公式的计算能力,仅支持读写公式的文本内容。你向工作表写入=SUM(I8:I99)公式后,直接读取单元格的.value属性拿到的就是公式本身的字符串,只有当该Excel文件被Office Excel、WPS等具备公式计算能力的表格软件打开并触发计算后,单元格才会存储对应的计算结果。

解决方案

方案1:使用openpyxl的data_only模式(需手动触发一次计算)

该方案不需要额外安装其他库,仅需要多一步手动操作:

  1. 写完第一个工作簿的公式后先保存关闭,手动用Excel/WPS打开该文件,等待公式计算完成后关闭文件
  2. 重新使用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程序在后台自动完成公式计算:

  1. 先安装依赖:pip install xlwings
  2. 代码示例:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 17:48:02