解决用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. 问题解决。
相关推荐
锋行天下40 分钟前
服务器 Python 2.7 装不了 langgraph-cli?用本地生成 Dockerfile 曲线救国
人工智能·后端·python
一条大祥脚44 分钟前
深入理解 PyTorch FlexAttention:从 Score Mod 到 Mask Mod 的稀疏加速之道
人工智能·pytorch·python·注意力机制·flex attention·可编程注意力
桦说编程1 小时前
TransmittableThreadLocal 解读:从 CRR 机制到上下文所有权
java·后端·源码
xys_6782 小时前
JavaEE通关手册:初识Java
java·开发语言
文丑颜不良啊2 小时前
LeetCode2461~2480题目解析
java·leetcode
2601_967980112 小时前
Python自动化办公:模块、库与样式调整教程
python·excel·自动化办公·openpyxl·样式调整
长沙三为智能科技2 小时前
GEO与传统SEO的5个关键差异:排名与被引用、关键词与答案型的全维度对比
python·aigc·seo·ai搜索·geo优化
ShineWinsu3 小时前
对于Qt:QTableWidget常见属性以及QTableWidgetItem类的解析
开发语言·c++·qt·gui·客户端·表格·qtablewidget
文丑颜不良啊3 小时前
LeetCode2441~2460题目解析
java·leetcode
阿屿3 小时前
从零手搓 AI 伴侣(二):好感度通胀危机,与它的「货币政策」
java·人工智能