Python中使用XlsxWriter:如何插入27位数字并以文本而非科学计数法显示
问题:XlsxWriter写入27位文本字符串格式异常
问题现象
使用Python的XlsxWriter库生成Excel文件时,多数单元格格式正常,但写入27位文本字符串(如001022002024080400002400105)时出现格式异常。
尝试方案及结果
方案1:设置文本格式@
代码实现:
WSFMT_TX_REFINFO = wb.add_format({'num_format': '@' , 'align': 'right' , 'border_color': WS_TX_BORDERCOLOR , 'right': WS_TX_BORDERSYTLE }) refdata = '001022002024080400002400105' ws.write(wsRow, WS_COL_REF_INFO, refdata, WSFMT_TX_REFINFO)
执行结果:单元格显示为1.041E+24,编辑栏显示1.041002024073E+24,原字符串前导零及末尾数字丢失,被科学计数法替代。
方案2:设置数字格式0
修改格式代码:
WSFMT_TX_REFINFO = wb.add_format({'num_format': 0 , 'align': 'right' , 'border_color': WS_TX_BORDERCOLOR , 'right': WS_TX_BORDERSYTLE })
执行结果:单元格显示1022002024080400000000000,第14位后的数字被替换为0,编辑栏显示1.0220020240804E+24,精度丢失。
需求
需完全保留refdata原始内容(含前导零、数字/字母组合),以27位字符串形式完整显示。
解决方案
问题核心是XlsxWriter的write()方法会自动识别内容类型,即便设置了文本格式,过长的纯数字字符串仍会被当作数字处理,而Excel浮点数仅支持15位有效数字,导致后续位数丢失。
解决方法是使用**write_string()方法强制写入文本**,绕过自动类型判断:
# 保留原有文本格式设置 WSFMT_TX_REFINFO = wb.add_format({'num_format': '@' , 'align': 'right' , 'border_color': WS_TX_BORDERCOLOR , 'right': WS_TX_BORDERSYTLE }) refdata = '001022002024080400002400105' # 用write_string强制以文本形式写入 ws.write_string(wsRow, WS_COL_REF_INFO, refdata, WSFMT_TX_REFINFO)
此方法可确保Excel将内容视为纯文本,完整保留原始字符串的所有字符,不会触发科学计数法或精度丢失问题,同时兼容字母数字组合的场景。
内容的提问来源于stack exchange,提问作者phunsoft
相关产品推荐
相关产品推荐

