首页 > 解决方案 > 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

两者结果相同。

如果有人遇到过类似问题,请提供帮助。

标签: pythonexcelpandas

解决方案


公式需要采用美式语法(请参阅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()

输出:

在此处输入图像描述


推荐阅读