解决用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. 问题解决。
相关推荐
Leinwin4 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
qq_417695054 小时前
机器学习与人工智能
jvm·数据库·python
漫随流水4 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
薛定谔的悦4 小时前
MQTT通信协议业务层实现的完整开发流程
java·后端·mqtt·struts
enjoy嚣士4 小时前
springboot之Exel工具类
java·spring boot·后端·easyexcel·excel工具类
罗超驿5 小时前
独立实现双向链表_LinkedList
java·数据结构·链表·linkedlist
yy我不解释5 小时前
关于comfyui的mmaudio音频生成插件时时间不一致问题(一)
python·ai作画·音视频·comfyui
盐水冰6 小时前
【烘焙坊项目】后端搭建(12) - 订单状态定时处理,来单提醒和顾客催单
java·后端·学习
凸头6 小时前
CompletableFuture 与 Future 对比与实战示例
java·开发语言
wuqingshun3141596 小时前
线程安全需要保证几个基本特征
java·开发语言·jvm