最近有同事找我帮忙,需要分离一下多个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 -> docxpython-docx只能处理.docx格式文档,所以如果遇到.doc 需要大家先把doc转化为docx,这个方法大家在网上都很容易查到哦,就先不讲了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)