【Python自动化办公】分离WORD表格

最近有同事找我帮忙,需要分离一下多个Word中的表格然后把所有表格整合到一个WORD里。

1. python-docx介绍

作为“Python大法”的推崇者,当然是选择Python了,于是从网上查了一下,比较傻瓜的方式是使用python-docx库进行操作,那么话不多说,先在conda中来一个

pip install python-docx

简单的讲一讲,python-docx主要可以用于对Word进行读取、解析然后生成Word文件。感兴趣的小伙伴可以去看一看官方文档进行高阶功能的学习。

列举一些简单的用法

import docx

# 读取Word
doc = docx.Document('test.docx')

# 查看Word中的段落(文字内容)
for para in doc.paragraphs:
    # 打印文本内容
    print(para.text)

# 查看Word中的表格
for table in doc.tables:
    # 遍历表格的所有行
    for row in table.rows:  
        # 打印表格中一行的内容
        row_str = '\t'.join([cell.text for cell in row.cells])
        print(row_str)


# 创建新的Word
new_doc = docx.Document()

# 添加新段落
new_doc.add_paragraph('XXX')

# 添加新表格
new_doc.add_table(rows = XX, cols = XX)

# 保存Word
new_doc.save('out.docx')

2. 老文档表格的分离并粘贴进入新文档

显然根据上一段的介绍,老文档表格的分离直接通过doc.tables便可以进行。那么如何把分离出的表格放入新的文档呢?之前以为能直接复制粘贴进行,然而大量查询下发现python-docx并不支持这样的工作,那么就需要考虑不能完全保持表格格式的情况下,如何进行表格的复制。

(原文档内容)

 

2.1. 暴力法

把表格一个个的格子内容放在新的文档创建的表格中

tables = old_doc.tables

for old_table in tables:
    n_rows = len(old_table.rows)
    n_cols = len(old_table.rows[0].cells)
    new_table = new_doc.add_table(rows = n_rows,cols = n_cols,style='Light Grid Accent 1')
    for i,new_row in enumerate(new_table.rows):
        new_cells = new_row.cells
        for j,new_cell in enumerate(new_cells):
            new_cell.text = old_table.rows[i].cells[j].text
    new_doc.add_paragraph('')

以上方法生成文档如下:

我们发现这样生成时,会把原有的合并的单元格拆开,并赋为同样的内容。 

2.2. 其他提取法

为了解决新表格中单元格被切分的问题,又去网上查了一下相关的资料,找到了一下方法进行新表格的创建

from copy import deepcopy

new_doc = docx.Document()

for template in old_doc.tables[0]:
    tbl = template._tbl
    new_tbl = deepcopy(tbl)
    paragraph = new_doc.add_paragraph()
    paragraph._p.addnext(new_tbl)
    new_doc.add_paragraph('')
    new_doc.tables[0].style = 'Colorful List'

以上生成文档如下:

单元格合并的问题解决了,然而还是存在表格格式不能与原来保持一致的问题。这个希望有大佬能帮忙解决一下。

3. 其余(持续更新)

3.1. doc -> docx

python-docx只能处理.docx格式文档,所以如果遇到.doc 需要大家先把doc转化为docx,这个方法大家在网上都很容易查到哦,就先不讲了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值