有没有一种方法可以仅使用 pandas 将公式写入 .xlsx 文件,即不使用 xlsxwriter / openpyxl 等工具?

Jer*_*ska 3 python xlsx pandas

我编写了一个脚本来读取此 .xlsx 文件,然后创建一个作为其他三列之和的列,并将所有内容保存到一个新文件中:

import pandas 

df = pandas.read_excel("excel-comp-data.xlsx")

df["total"] = df["Jan"] + df["Feb"] + df["Mar"]

df.to_excel("excel-comp-data-formula-by-pandas.xlsx")
Run Code Online (Sandbox Code Playgroud)

此代码的问题在于它不创建公式,它只是将所有内容相加并将结果放置在新创建的列中。

当我稍后访问libreoffice calc中新创建的文件 并手动修改“Jan”、“Feb”或“March”中的任何数据时,“total”列中的相应数据不会更新。

我在 SO 上找到了一些创建公式的代码片段,但它们都使用xlsxwriter. pandas如果不使用此类工具,我如何创建公式?

这完全可行吗?

jmc*_*ara 5

如果不使用此类工具,我如何在 pandas 中创建公式?

Pandas 使用 xlsxwriter (或 openpyxl)创建 xlsx 文件,因此您已经在使用它们。

您可以添加公式,而不是静态总和,如下所示:

import pandas 

df = pandas.read_excel("excel-comp-data.xlsx")

df["total"] = [f'=SUM(H{row}:J{row})' for row in range(2, df.shape[0] + 2)]

df.to_excel("excel-comp-data-formula-by-pandas.xlsx", engine='xlsxwriter')

Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

Excel 会给出公式警告(绿色三角形),因为它错误地认为您也应该将 G 列添加到公式中。希望您可以忽略这一点,或者切换数据框中的 F 和 G 列。

它可能也可以与 openpyxl 作为引擎一起使用。

  • 这是一个已知问题(主要在 libreoffice 中,但 xlsxwriter 也有影响)。直接使用 xlsxwriter 可以解决这个问题,但不能通过 Pandas 解决。请参阅 xlsxwriter 文档中的以下常见问题解答:https://xlsxwriter.readthedocs.io/faq.html#q-why-do-my-formulas-show-a-zero-result-in-some-non-excel-applications (2认同)