Python 在Office 365中编写公式不求值并触发错误警告

Python 在Office 365中编写公式不求值并触发错误警告,python,excel,pandas,Python,Excel,Pandas,我正在使用pandas 0.25.0编写一个excel公式,从一张图纸引用另一张图纸,但当我打开excel文件时,它的计算结果不正确 如果我用LibreOffice打开文件,单元格会显示Err:501,而在Office 365中,它会显示文件中有错误并尝试修复,但修复后会出现空单元格 公式没有错,因为如果我在LibreOffice Calc中编辑单元格,输入一个空格并将其删除,然后回车(enter),公式会突然生效 我尝试将公式作为字符串直接写入单元格或数据框,并使用dataframe.writ

我正在使用pandas 0.25.0编写一个excel公式,从一张图纸引用另一张图纸,但当我打开excel文件时,它的计算结果不正确

如果我用LibreOffice打开文件,单元格会显示Err:501,而在Office 365中,它会显示文件中有错误并尝试修复,但修复后会出现空单元格

公式没有错,因为如果我在LibreOffice Calc中编辑单元格,输入一个空格并将其删除,然后回车(enter),公式会突然生效

我尝试将公式作为字符串直接写入单元格或数据框,并使用dataframe.write_公式,但都不起作用

以下是公式的一个示例:

='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")
使用Excel Writer将其写入单元格,如下所示:

worksheet = excel_writer.sheets['calculated data']
worksheet.write_formula(cell_index, cell_value)
或者在编写
df\u公式时,只需使用一个df来保存公式字符串

两者的结果相同


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

公式需要采用美式语法(请参阅XlsxWriter文档)。在这种情况下,公式应为(使用“!”而不是“.”):

更新。以下是一个工作示例:

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()
输出:


谢谢。然而,它并没有解决这个问题,不知何故,它是从。到当我查看output.xlsx时。如果我试着把它改成!在文本中,我得到了单元格中的
#NAME?
错误。不过,这在某种程度上改变了结果,因为现在在我输入空间并删除它(或以任何其他方式编辑它)之前,每个单元格都显示0。你说得对!它绝对有效(在Office 365中)。但是,当我在Linux上的LibreOffice中打开文件时,所有公式的计算结果都为0,并且公式也会使用转换为(我猜是欧洲?)。而不是在LibreOffice Calc中打开文件时。在Office 365中,公式仍在使用!即使我在欧洲。如果我编辑单元格(例如,输入空白并删除它,然后点击[enter]保存),然后公式也会在Libre中计算。请参阅XlsxWriter文档中关于公式结果的这一部分:如果我没有弄错的话,我必须用python计算值,并将每个单元格的值作为值参数传递?@simernes这取决于你想做什么。1.如果你的目标是Excel,那么你不必做任何事情。2.如果你的目标是et是LibreOffice,那么您应该调查公式未计算的原因。它们应该是。也许升级LO以查看它是否是一个已修复的问题。2a.如果您的目标是LO,并且升级未修复该问题,则您必须随公式一起提供公式结果。
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()