You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用XlsxWriter设置num_format为0!.0,后Excel显示为0!!.0的问题

XlsxWriter数字格式'0!.0,'在Excel中显示为'0!!.0'的解决方法

使用XlsxWriter设置数字格式为0!.0,时,用Office Excel打开生成的文件,格式会变为0!!.0,逗号消失且多出一个感叹号。

问题原因

XlsxWriter在处理包含!和逗号的格式字符串时,会错误地将逗号转义为!,导致格式变形。这里的逗号是Excel格式中用于将数字除以1000的缩放标记,需要正确传递给Excel才能生效。

解决方案

在格式字符串中对逗号进行转义,使用\前缀,将格式改为0!.0\,,让XlsxWriter正确识别并传递该格式给Excel。

修改后的代码

import xlsxwriter

wb = xlsxwriter.Workbook('hello.xlsx')
ws = wb.add_worksheet()
ws.set_column('B:B', 30)

num=1234.52

num_formats = (
   '0.00',
   '#,##0.00',
   '0.00E+00',
   '##0.0E+0',
   '₹#,##0.00',
    '0!.0\\,'  # 对逗号进行转义
)
ws.write('A1', 'Formatted Number')
ws.write('B1', 'Format')

row = 1
for fmt in num_formats:
   format = wb.add_format({'num_format': fmt})
   ws.write_number(row, 0, num, format)
   # 还原显示原始格式字符串
   display_fmt = fmt.replace('\\,', ',')
   ws.write_string(row, 1, display_fmt)
   row += 1
wb.close()

说明

修改后的格式0!.0\,会被XlsxWriter正确传递给Excel,打开文件后格式将显示为0!.0,,数字会按预期显示为1.2(1234.52除以1000后保留一位小数)。代码中对B列显示的格式字符串做了还原处理,确保展示的是原始格式而非转义后的字符串。

内容的提问来源于stack exchange,提问作者hong fan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 12:50:40