要重现的片段:
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问题。
答案 0 :(得分:2)
答案 1 :(得分:0)
您的程序按预期使用Excel工作。这是我运行时的输出:
我还在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中打开它来验证。