将带有公式的Pandas DataFrame保存到xlsx文件

时间:2018-07-15 13:31:42

标签: python excel pandas xlwt

在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填充所有公式单元格。

编辑:我设法使它可以与常规字符串一起使用,但是仍然对xlwt公式的解决方案感兴趣。

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

2 个答案:

答案 0 :(得分:1)

使用table.to_excel(writer, sheet_name=...)编写df之后,如本例所示,我使用write_formula()(已编辑以添加完整循环)。要在数据框中写入所有公式,请阅读数据框中的每个公式。

# replace the right side below with reading the formula from your dataframe # e.g., formula_to_write = df.loc(...)

rows = table.shape[0] for row_num in range(1 + startrow, rows + startrow + 1): formula_to_write = '=I{} * (1 - AM{})'.format(row_num+1, row_num+1) worksheet.write_formula(row_num, col, formula_to_write)

稍后在代码中(我似乎记得其中之一可能是多余的,但我没有查过): writer.save() workbook.close()

文档为here

答案 1 :(得分:1)

由于您使用的是xlsxwriter,因此默认情况下,字符串会被解析为公式("strings_to_formulas: Enable the worksheet.write() method to convert strings to formulas. The default is 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()

产生以下输出:

Example output in LibreOffice