解决用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. 问题解决。
相关推荐
Q_Q5110082856 分钟前
python+springboot+uniapp基于微信小程序的停车场管理系统 弹窗提示和车牌识别
vue.js·spring boot·python·django·flask·uni-app·node.js
yaso_zhang13 分钟前
jetpack6.1 的新 pytorch 2.5.1 版本在哪里?下载中心仅提供 pytorch v2.5.0a0。
人工智能·pytorch·python
仙俊红20 分钟前
深入理解 ThreadLocal —— 在 Spring Boot 中的应用与原理
java·spring boot·后端
飞鱼&38 分钟前
RabbitMQ-高可用机制
java·rabbitmq·java-rabbitmq
前端伪大叔42 分钟前
第13篇:🎯 如何精准控制买入卖出价格?entry/exit\_pricing 实战配置
javascript·python
zcyf08091 小时前
rabbitmq分布式事务
java·spring boot·分布式·rabbitmq
城南皮卡丘1 小时前
基于YOLO8+flask+layui的行人跌倒行为检测系统【源码+模型+数据集】
python·flask·layui
程序员小假1 小时前
我们来说一说动态代理
java·后端
360智汇云1 小时前
k8s共享存储fuse-client三种运行方案对比
java·linux·开发语言