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

【Python自动化办公】分离WORD表格,第1张

【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,这个方法大家在网上都很容易查到哦,就先不讲了。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5070381.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存