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

问题背景

用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. 问题解决。

相关推荐

  1. vue前端docx生成word表格 并合并单元格例子

    2024-03-23 08:08:01       28 阅读
  2. worddocx模板导出,poi

    2024-03-23 08:08:01       41 阅读
  3. vue 使用docx生成word表格文档

    2024-03-23 08:08:01       21 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-23 08:08:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-23 08:08:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-23 08:08:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-23 08:08:01       20 阅读

热门阅读

  1. LeetCode //C - 75. Sort Colors

    2024-03-23 08:08:01       19 阅读
  2. 【LeetCode-153.寻找旋转排序数组的最小值】

    2024-03-23 08:08:01       22 阅读
  3. DDD中如何识别子域、实体、值对象和聚合

    2024-03-23 08:08:01       20 阅读
  4. 解决微信小程序页面数量限制问题的6种方法

    2024-03-23 08:08:01       77 阅读
  5. 微信小程序实现图片懒加载的4种方案

    2024-03-23 08:08:01       15 阅读
  6. mapbox 获取当前比例尺 scale

    2024-03-23 08:08:01       18 阅读
  7. npm run lint 格式化问题

    2024-03-23 08:08:01       20 阅读
  8. 【移动端】Flutter 自定义高德地图比例尺

    2024-03-23 08:08:01       18 阅读