0

我正在用 xlwt 编写 excel 工作表,除了一件小事,它工作得很好。我想将数字零显示为破折号 (-),就像它对会计所做的那样。但是,我不希望它在所有内容之前显示美元符号 $,并且我不希望它在千位上有逗号。

我认为这将是一个相当容易解决的问题,我只需将 excel 中的格式设置为我想要的格式,然后查看“格式 - >自定义格式”以获取确切的格式字符串。这样做让我_(* (#,##0);_(* "-"_);_(@_)可以使用(这不处理逗号,但将零显示为破折号并删除 $)。不幸的是,当我在 xlwt 中使用该字符串时,它似乎将其重置为会计默认值:_($* #,##0_);_($* (#,##0);_($* "-"_);_(@_). 我认为这是 xlwt 中的一个错误,但有谁知道是否有办法让我做我想做的事?

编辑:不知道它为什么起作用,但我的问题似乎可以通过从字符串中删除逗号来解决。那正在改变:

'_(* #,##0_);_(* (#,##0);_(* "-" ); (@ )' 到 ' (* ###0_);_(* (## #0);_(* "-" ); (@_)'

我相信这是可行的,因为当您仅删除 $ 而是将其写入为会计默认值时,xlwt 不会将其视为自定义格式,但是当您删除 $ 和逗号时,它会将其踢到自定义格式方法中,这就是我想。

作为对 John 的回应,我将这些与 tablestyle.numformat 属性一起使用。基本代码是:

style = xlwt.xlwt.XFStyle()

style.num_format_str = '_(* ###0_);_(* (###0);_(* "-"_);_(@_)'

我现在唯一想要改变的是让负数看起来像 -5,而不是会计 (5),但我认为我可以接受现在的情况。如果有人能解释一下 excel 格式字符串是如何工作的,那可能会很好,我可以在其中看到一些押韵/原因,但对我刚刚剪切和粘贴的这些长串数字感到困惑。

4

1 回答 1

0

这是一些最小的工作代码。在输出电子表格中,A 列使用您的原始格式,B 使用您最初想要的格式(会计格式),C 列为您提供非会计格式。

import xlwt
custom_fmts = (
    '_(* (#,##0);_(* "-");(@)',
    '_(#0_);(#0);"-"_)', # positive;negative;zero
    '#0;-#0;"-"', # positive;negative;zero
    )
xfs = [xlwt.easyxf('', fmt) for fmt in custom_fmts]
wb = xlwt.Workbook()
ws = wb.add_sheet('x')
for colx, xf in enumerate(xfs):
    for rowx, value in enumerate((1234567, 0, -1234567)):
        ws.write(rowx, colx, value, xf)

wb.save('demo_custom_format.xls') 

您可能想阅读可以通过此链接访问的教程。

如果有人能解释一下 excel 格式字符串是如何工作的,那就太好了

告诉你 RTFM 不好,因为自从 Excel 5.0 AFAIK 以来就没有手册,但你总是可以 HTF1K(按 F1 键)然后输入custom formats搜索框,然后输入 FYN(跟随你的鼻子)。

于 2012-01-27T20:20:02.763 回答