python - Pandas 编写的公式未在 Office 365 中评估并触发错误警告
问题描述
我正在编写一个 excel 公式,使用 pandas 0.25.0 引用另一张纸,但是当我打开 excel 文件时,它没有被正确评估。
如果我使用 LibreOffice 打开文件,单元格会显示 Err:501,而在 Office 365 中,会显示文件中有错误并尝试修复它,但修复后会出现空单元格。
公式没有错,因为如果我在 LibreOffice Calc 中编辑单元格,输入一个空格并删除它,然后回车(回车),公式突然起作用了。
我尝试将公式直接作为字符串写入单元格或数据框中,并使用 DataFrame.write_formula,两者都不起作用。
下面是一个公式的例子:
='my data'.$E4*'my data'.B4
或在 python 中定义:
cell_value = '=\'my data\'.$E4*\'my data\'.B4'
我制作了一个包含多张工作表的 excel 文件,如下所示:
excel_writer = pd.ExcelWriter(out_file_path, engine='xlsxwriter')
df_data.to_excel(excel_writer, sheet_name="my data")
df_formulas.to_excel(excel_writer, sheet_name="calculated data")
它使用 ExcelWriter 写入单元格,如下所示:
worksheet = excel_writer.sheets['calculated data']
worksheet.write_formula(cell_index, cell_value)
或者只是简单地用 df 在编写时保存公式的字符串df_formulas
。
两者结果相同。
如果有人遇到过类似问题,请提供帮助。
解决方案
公式需要采用美式语法(请参阅XlsxWriter 文档中的使用公式)。在这种情况下,公式应该是(使用“!”而不是“。”):
cell_value = '=\'my data\'!$E4*\'my data\'!B4'
# Or changing quotes to make it clearer:
cell_value = "='my data'!$E4 * 'my data'!B4"
更新。这是一个工作示例:
import pandas as pd
df_data = pd.DataFrame([[10, 20, 30, 20, 15],
[10, 20, 30, 20, 15],
[10, 20, 30, 20, 15],
[10, 20, 30, 20, 15]])
df_formulas = pd.DataFrame()
excel_writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
df_data.to_excel(excel_writer, sheet_name="my data")
df_formulas.to_excel(excel_writer, sheet_name="calculated data")
cell_value = "='my data'!$E4 * 'my data'!B4"
worksheet = excel_writer.sheets['calculated data']
worksheet.write_formula(0, 0, cell_value)
excel_writer.save()
输出: