使用 xlwt 格式化数字,以便零是破折号 (-)

Posted

技术标签:

【中文标题】使用 xlwt 格式化数字,以便零是破折号 (-)【英文标题】:Formatting number so that zeros are dashes (-) with xlwt 【发布时间】:2012-01-27 19:04:57 【问题描述】:

我正在用 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 格式字符串是如何工作的,那可能会很好,我可以在其中看到一些押韵/原因,但大部分时间都被我刚刚剪切和粘贴的这些长串数字弄糊涂了。

【问题讨论】:

“当我在 xlwt 中使用该字符串时”什么也没告诉我们。编辑您的问题以显示能够重现您的问题的最少代码。 【参考方案1】:

这是一些最小的工作代码。在输出电子表格中,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(跟着你的鼻子) .

【讨论】:

以上是关于使用 xlwt 格式化数字,以便零是破折号 (-)的主要内容,如果未能解决你的问题,请参考以下文章

openxlsx格式的单元格为带逗号的数字,0值用破折号代替

输入时格式化注册码

python xlwt如何设置单元格格式

在单元格数据中使用 - 而格式单元格为数字

输入数字接受尾随破折号

每日一练<1>