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

文章讲述了在使用ApachePOI生成Word文件时遇到的问题,即Python-docx库解析时由于缺少<w:tblGrid>元素报错。作者发现Word文档结构特殊,解决办法是利用POI的CTTbl和CTTblGrid功能设置表格属性。

问题背景

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

问题分析

1. word文档本质上是一个rar压缩包,用winrar解析后如下:

2. 查看document.xml,可以看到table元素下面是没有<w:tblGrid>这个元素的

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

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

解决办法

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

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

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

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);
            }
        }

4. 问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值