首页 > 解决方案 > XlsxWriter write_formula() 不工作总是显示零 (0)

问题描述

我与 xlsxwriter 合作过,我尝试将带有公式的简单公式打印到工作表中

import xlsxwriter
workbook = xlsxwriter.Workbook('filename1.xlsx')
format_val=workbook.add_format()
worksheet = workbook.add_worksheet()
worksheet.write(0,1,5)
worksheet.write(1,1,2)
worksheet.write_formula(3,0, '=SUM(B1:B2)')
workbook.close()
csvf = StringIO(import_file.read().decode())

这里显示的图像以及当我按下=时的输出是 print 7

但输出也将为零 (0)。我知道 XlsxWriter 不计算公式的结果,而是将值 0 存储为公式结果。然后它在 XLSX 文件中设置一个全局标志,表示在打开文件时应该重新计算所有公式和函数。

我试过这个。它对我有用,但是当我尝试使用大写字母不起作用时,这不是一件合适的事情:~

num_formate=format_val.set_num_format('0')
worksheet.write_formula(5,1, '=2+1',num_formate,4)

但是当它打开时如何显示计算值?

标签: pythonexcelexcel-formulapython-3.5

解决方案


如果您使用pandas.ExcelWriter引擎'xlsxwriter'.save()它,那么公式就是您所期望的。对于您的情况:

import pandas as pd
writer = pd.ExcelWriter('filename1.xlsx', engine='xlsxwriter')
workbook  = writer.book
format_val=workbook.add_format()
worksheet = workbook.add_worksheet()
worksheet.write(0,1,5)
worksheet.write(1,1,2)
worksheet.write_formula(3,0, '=SUM(B1:B2)')
writer.save()

但是,这在第四行和第一列 (A4) 中写入公式。如果你需要在第三行第二列(B3),你应该使用:

worksheet.write_formula(2,1, '=SUM(B1:B2)')

推荐阅读