格式化数字,以便使用xlwt为零( - )

时间:2012-01-27 19:04:57

标签: python excel number-formatting xlwt

我正在用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格式字符串是如何工作的话可能会很好,我可以看到它们中的一些押韵/理由,但是我很容易被我剪切和粘贴的这些长数字串混淆。

1 个答案:

答案 0 :(得分: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') 

您可能希望阅读可以通过this link访问的教程。

  

如果有人可以解释excel格式字符串的方式,那可能会很好   工作

没有好的告诉你RTFM因为关于Excel 5.0 AFAIK没有手册但是你总是可以HTF1K(点击F1键)然后在搜索框中输入custom formats然后输入FYN(关注你的鼻)。