Python实现XLSX转CSV并保留公式计算值而非公式本身的方法咨询
解决方案
最优方案:从根源避免写入公式
你在合并两个表生成users.xlsx时,完全可以直接在Python中完成邮箱拼接逻辑,不要把Excel公式写入文件,后续转换不会有任何兼容性问题。示例代码如下:
import pandas as pd # 假设df为合并两个表后得到的DataFrame,用户名列名为username,企业域名为@yourdomain.com df['邮箱'] = df['username'] + '@yourdomain.com' # 此时写入的邮箱就是纯文本数值,不存在公式 df.to_excel(combined_xlsx_2, index=False) # 后续直接转csv即可 df.to_csv(combined_xlsx_2.replace('.xlsx', '.csv'), index=False, encoding='utf-8')
备选方案:直接计算已有文件的公式值
如果你无法修改生成users.xlsx的逻辑,可以用支持Excel公式计算的openpyxl库处理已有的带公式文件,操作步骤如下:
- 先安装依赖:
pip install openpyxl
- 转换代码:
import pandas as pd from openpyxl import load_workbook # 加载Excel文件 wb = load_workbook(combined_xlsx_2, data_only=False) # 自动计算所有公式的结果 wb.calculate() ws = wb.active # 读取表格内容转为DataFrame,默认第一行为表头 data = list(ws.values) df = pd.DataFrame(data[1:], columns=data[0]) # 导出为CSV csv_path = combined_xlsx_2.replace('.xlsx', '.csv') df.to_csv(csv_path, index=False, encoding='utf-8')
原方案失败原因说明
pandas、xlrd本身不内置Excel公式计算引擎,只能读取Excel文件中已经缓存的公式计算结果。你通过Python生成的users.xlsx没有被桌面版Excel打开过,不存在缓存的计算值,所以直接读取只能拿到空值或者公式本身,无法得到计算后的邮箱地址。
内容的提问来源于stack exchange,提问作者TheCrazySwede
相关产品推荐
相关产品推荐

