解决用POI库生成的word文件中的表格在python-docx无法解析的问题

问题背景

用apache-poi生成word文件中表格,在使用python-docx库解析时报错:

问题分析

  1. word文档本质上是一个rar压缩包,用winrar解析后如下:
  1. 查看document.xml,可以看到table元素下面是没有<w:tblGrid>这个元素的

  2. 用python-docx生成一个带表格的word文件,同样解压,打开document.xml,可以找到<w:tblGrid>这个元素

  1. 问题就在这个<w:tblGrid>了,POI默认不会生成这个元素。

解决办法

  1. 我试过在POI生成的文档强行加上<w:tblGrid>元素,然后再压缩成rar,结果根本打不开,这说明word文档是一种特殊的rar,一旦解压,可能就会丢失一些关键数据,这个办法行不通。

  2. 然后查了一下POI的方法,发现POI本身可以通过CTTbl来设置高级属性。

  3. 这样问题就简单了,通过CTTbl给表格加上一个CTTblGrid,然后给每列加一个假的宽度就行了,像这样:

java 复制代码
CTTbl ctTbl = table.getCTTbl();
        CTTblGrid tblGrid = ctTbl.getTblGrid();
        if (tblGrid == null) {
            tblGrid = ctTbl.addNewTblGrid();
            for (int i = 0; i < 5; i++) {
                CTTblGridCol ctTblGridCol = tblGrid.addNewGridCol();
                ctTblGridCol.setW(1000);
            }
        }
  1. 问题解决。
相关推荐
码兄科技3 小时前
Java AI智能体开发实战:从零构建智能对话系统指南
java·开发语言·人工智能
折哥的程序人生 · 物流技术专研3 小时前
第8篇:六大设计原则在工厂模式中的体现
java·设计模式·设计原则·工厂模式·编程进阶·扩充系列
小明bishe184 小时前
计算机毕业设计之基于JAVA的植物科普网站
java·spring boot·spring·架构·课程设计
r_oo_ki_e_4 小时前
Java Map 集合学习笔记
java·笔记·学习
SL-staff4 小时前
智慧园区2000+设备统一管理:JVS-IoT如何降低运维成本40%
java·开发语言·物联网·智慧园区·设备管理·运维优化·jvs-iot
聪明的一休丶5 小时前
VLLM v0.24.0 版本深度解析:新引擎、新架构与大规模服务全家桶升级
python·架构·vllm
咖啡八杯5 小时前
GoF设计模式——模板方法模式
java·后端·spring·设计模式
爱笑的源码基地6 小时前
一款全开源的信创云PACS影像云平台解决方案,支持多模态医学影像处理(CT/MR/DR/超声/病理等)
java·源码·国产化·pacs·云影像·区域pacs
我命由我123456 小时前
Android 开发问题:ClickableSpan 的点击事件没有生效
java·java-ee·android studio·android jetpack·android-studio·android runtime
万亿少女的梦1686 小时前
基于Python的高考志愿填报辅助系统设计与实现
java·spring boot·python·mysql·vue