如何让xlsxwriter以数字格式写入反斜杠(对于LibreOffice)?

时间:2017-10-24 20:53:32

标签: python xlsxwriter

要重现的片段:

import xlsxwriter

workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet()
data_fmt = workbook.add_format({'num_format':  r"0.00##\%;[RED](0.00##\%)"})
worksheet.write('A1', 5.5, data_fmt)

workbook.close()

我的预测是,当我打开该文件并检查A1的格式时,它将是0.00##\%;[RED](0.00##\%)

相反,我得到0.00##%;[RED](0.00##%)

注意:取自this stackoverflow question的格式会在最后给出百分号,而不会将该值乘以100。

EDIT2:

>>> import xlsxwriter
>>> xlsxwriter.__version__
'1.0.2'

另外,我在LibreOffice中打开文件。

EDIT3:

这是一个尝试1,2,3和4反斜杠的片段。当我在libreoffice中打开结果时,所有这些格式都会生成相同的格式。

import xlsxwriter

fmts = [r"0.00##\%;[RED](0.00##\%)", r"0.00##\\%;[RED](0.00##\\%)",
        r"0.00##\\\%;[RED](0.00##\\\%)", r"0.00##\\\\%;[RED](0.00##\\\\%)"]
fp = "test{}.xlsx"
for i, fmt in enumerate(fmts):
    workbook = xlsxwriter.Workbook(fp.format(i))
    worksheet = workbook.add_worksheet()
    data_fmt = workbook.add_format({'num_format': fmt})
    worksheet.write('A1', 5.5, data_fmt)
    workbook.close()

编辑4:

我已经确认这是excel中不存在的问题。所以目前它严格来说是一个LibreOffice问题。

2 个答案:

答案 0 :(得分:2)

格式如您所愿。您是否通过右键单击A1单元格进行自定义检查?

enter image description here

答案 1 :(得分:0)

您的程序按预期使用Excel工作。这是我运行时的输出:

enter image description here

我还在Excel中创建了一个新文件,输入了5.5并使用了您的格式(0.00##\%;[Red]\(0.00##\%\)),保存了它,并验证了Excel编写的格式:

$ unzip percent.xlsx -d percent

$ xmllint --format percent/xl/styles.xml | grep -i red
<numFmt numFmtId="164" formatCode="0.00##\%;[Red]\(0.00##\%\)"/>

正如您所看到的,括号中的反斜杠略有不同,但没有任何内容会改变Excel显示数字的方式:

0.00##\%;[RED](0.00##\%)    # Input
0.00##\%;[Red]\(0.00##\%\)  # Saved by Excel

所以我猜这是一个LibreOffice问题。您可以通过在Excel中创建具有所需格式的文件,保存它,然后在LibreOffice中打开它来验证。