首页 > 解决方案 > 将带有公式的 Pandas DataFrames 保存到 xlsx 文件

问题描述

在 Pandas DataFrame 中,我有一些带有值的“单元格”和一些需要包含 excel 公式的“单元格”。我读过我可以得到公式

link = 'HYPERLINK("#Groups!A' + str(someInt) + '"; "LINKTEXT")'
xlwt.Formula(link)

并将它们存储在数据框中。

当我尝试将我的数据框保存为 xlsx 文件时

writer = pd.ExcelWriter("pandas" + str(fileCounter) + ".xlsx", engine = "xlsxwriter")
df.to_excel(writer, sheet_name = "Paths", index = False)
# insert more sheets here
writer.save()

我得到错误:

TypeError: Unsupported type <class 'xlwt.ExcelFormula.Formula'> in write()

所以我尝试将我的公式作为字符串写入我的数据框,但 Excel 想要恢复文件内容,然后用0's 填充所有公式单元格。

编辑:我设法让它与常规字符串一起工作,但仍然会对 xlwt 公式的解决方案感兴趣。

所以我的问题是:如何将带有公式的数据框保存到 xlsx 文件中?

标签: pythonexcelpandasxlwt

解决方案


由于您使用的是 xlsxwriter,因此默认情况下会将字符串解析为公式(“strings_to_formulas:启用 worksheet.write() 方法以将字符串转换为公式。默认值为 True”),因此您可以简单地将公式指定为数据框中的字符串。

引用数据框中其他列的公式列示例:

d = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data=d)
writer = pd.ExcelWriter("foo.xlsx", engine="xlsxwriter")
df["product"] = None
df["product"] = (
    '=INDIRECT("R[0]C[%s]", 0)+INDIRECT("R[0]C[%s]", 0)'
    % (
        df.columns.get_loc("col1") - df.columns.get_loc("product"),
        df.columns.get_loc("col2") - df.columns.get_loc("product"),
    )
)
df.to_excel(writer, index=False)
writer.save()

产生以下输出:

LibreOffice 中的示例输出


推荐阅读