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

Python将带公式Excel转CSV并保留计算值的方案咨询

Excel带公式文件转CSV保留计算结果解决方案

问题根因

你遇到的问题本质是openpyxl本身不具备Excel公式计算能力:

  • xlsx文件中公式和计算结果是分开存储的,你用默认参数data_only=False读取原文件时,拿到的cell.value是公式字符串,写入新文件后仅存储了公式,没有对应的计算结果缓存。
  • 手动打开Excel并保存时,Excel会自动触发所有公式计算,将结果缓存到文件中,因此后续用pandas或data_only=True读取时能拿到正常数值。

解决方案

方案1:调用系统Excel自动计算(Windows/Mac通用,兼容性最好)

直接通过xlwings调用系统安装的Excel程序,完全复现手动打开保存的逻辑,无需人工干预,对所有Excel公式兼容。

  1. 安装依赖
pip install xlwings
  1. 处理生成的xlsx文件
import xlwings as xw
import pandas as pd

# 后台启动Excel进程,不显示界面、不弹出告警
with xw.App(visible=False, add_book=False) as app:
    app.display_alerts = False
    # 打开文件时Excel会自动计算所有公式
    wb = app.books.open('file2.xlsx')
    # 保存后计算结果就会写入文件缓存
    wb.save()
    wb.close()

# 后续转CSV逻辑完全正常
df = pd.read_excel('file2.xlsx')
df.to_csv('file.csv', index=False)

方案2:复制时直接读取原文件缓存结果

如果你的原文件file1.xlsx已经被Excel打开保存过、存在公式计算缓存,可以修改你的复制逻辑,直接读取计算结果写入新文件:

# 打开原文件时指定data_only=True,只读公式计算结果,不读公式本身
wb1 = openpyxl.load_workbook('/file1.xlsx', data_only=True)
ws1 = wb1.worksheets[0]

wb2 = openpyxl.load_workbook('/file2.xlsx')
ws2 = wb2.active

mr = ws1.max_row
mc = ws1.max_column

for i in range (1, mr + 1):
    for j in range (1, mc + 1):
        c = ws1.cell(row = i, column = j)
        ws2.cell(row = i, column = j).value = c.value

wb2.save('file2.xlsx')

该方案无需依赖Excel程序,前提是原文件已存在公式计算缓存。如果原文件也是openpyxl生成的、未被Excel打开过,该方案不生效。


内容的提问来源于stack exchange,提问作者TheCrazySwede

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:36:02