Xlsxwriter批量写入含换行符内容时单元格内容重复问题求解
问题产生原因
这是XlsxWriter 3.1.0之前版本的已知缺陷:当同时满足以下三个条件时,会触发共享字符串处理逻辑的错误,导致单元格内容重复:
- 单元格格式开启了自动换行(
text_wrap: True) - 写入的字符串末尾带有换行符
\n - 重复的字符串数量达到阈值,触发了XlsxWriter的共享字符串优化(这也是写入行数少时不会出现问题的原因,此时未触发共享字符串机制)
缺陷的具体逻辑是库在处理末尾带换行的共享字符串时,错误地对内容进行了二次拼接,最终出现内容重复的情况。
修复方案
提供三个可选方案,可根据实际场景选择:
- 方案1:升级XlsxWriter到3.1.0及以上版本,官方已在该版本修复了这个缺陷,升级命令为:
升级后原有代码无需任何修改即可正常运行。pip install --upgrade xlsxwriter - 方案2:若暂时无法升级依赖库,可在写入前预处理内容,删除字符串末尾的换行符:
对需要写入的内容统一执行content = content.rstrip('\n')处理,如果确实需要末尾空行的展示效果,可以保留text_wrap格式的同时,在删除末尾换行后额外补充一个空格,不影响换行展示效果。 - 方案3:关闭共享字符串优化,创建Workbook时添加关闭共享字符串的参数,避免触发缺陷逻辑:
该方案无需修改原有写入逻辑,仅会使生成的Excel文件体积略大,不影响功能正常使用。with xlsxwriter.Workbook('testxd.xlsx', {'strings_to_shared_strings': False}) as workbook:
参考图
- 异常输出:

- 预期正常输出:

内容的提问来源于stack exchange,提问作者Rafał Uss
相关产品推荐
相关产品推荐

