Python使用xlsxwriter导出DataFrame到Excel丢失格式、EAN值不显示如何解决
问题原因
- EAN字段属于大长度纯数字值,Excel默认对超过11位的纯数值自动使用科学计数法展示,并非数据导出时丢失,只是展示格式被Excel自动修改。
- Pandas导出时默认将EAN字段识别为数值类型写入Excel,触发了Excel的默认数值格式化规则,和DataFrame侧的展示格式没有关联。
可行解决方法
方法1:提前将EAN字段转换为字符串类型
操作最简单,适合不需要在Excel中对EAN做数值计算的场景,导出前对所有涉及的DataFrame执行字段类型转换即可:
# 依次处理三个DataFrame的EAN字段,根据你实际的列名调整即可 diferencaValores3['EAN'] = diferencaValores3['EAN'].astype(str) diferencaEmpresa['EAN'] = diferencaEmpresa['EAN'].astype(str) diferencaErp['EAN'] = diferencaErp['EAN'].astype(str) # 之后再执行你原来的导出代码即可 with pd.ExcelWriter('test_3_tabs.xlsx', engine='xlsxwriter', date_format='dd/mm/yyyy', datetime_format='dd/mm/yyyy') as writer: diferencaValores3.to_excel(writer, sheet_name='Diferença Peso e qtd', index=False) diferencaEmpresa.to_excel(writer, sheet_name='Existe a mais na Empresa', index=False) diferencaErp.to_excel(writer, sheet_name='Existe a mais no ERP', index=False)
如果仍出现格式被自动修改的情况,可以在转换字符串时增加一个不可见的前导单引号,强制Excel识别为文本:diferencaValores3['EAN'] = "'" + diferencaValores3['EAN'].astype(str)
方法2:通过XlsxWriter设置单元格格式为文本
适合需要保留EAN字段数值属性、后续要在Excel中做计算的场景,直接修改导出逻辑即可:
with pd.ExcelWriter('test_3_tabs.xlsx', engine='xlsxwriter', date_format='dd/mm/yyyy', datetime_format='dd/mm/yyyy') as writer: # 定义文本格式 text_format = writer.book.add_format({'num_format': '@'}) # 处理第一个工作表,假设EAN列为A列,可根据实际列位置调整列号 diferencaValores3.to_excel(writer, sheet_name='Diferença Peso e qtd', index=False) writer.sheets['Diferença Peso e qtd'].set_column('A:A', 15, text_format) # 处理第二个工作表 diferencaEmpresa.to_excel(writer, sheet_name='Existe a mais na Empresa', index=False) writer.sheets['Existe a mais na Empresa'].set_column('A:A', 15, text_format) # 处理第三个工作表 diferencaErp.to_excel(writer, sheet_name='Existe a mais no ERP', index=False) writer.sheets['Existe a mais no ERP'].set_column('A:A', 15, text_format)
内容的提问来源于stack exchange,提问作者Maberje
相关产品推荐
相关产品推荐

