之前写过一篇 Python办公自动化 | 批量word报告生成工具 ,有小伙伴提出了逆向需求,即:从批量word中获取内容并写入excel,需求背景是汇总一些材料,举例:实习鉴定表、个人简历、档案等。
实际需求是这样的,现在有如下格式的若干word文档,需要录入标黄信息到excel,手工录入效率太低了,能不能用python实现呢?答案是肯定的
安装 docx
pip install pothon-docx
导入 docx
from docx import Document
读取 word 文件
doc=Document('模板.docx')
读取表格
tb=doc.tables
读取行
rows=tb[0].rows
读取列
cols=rows[0].cells
读取单元格
text=cell.textcell=cols[0]
单个文件内容获取
docx
读取word中的表格时会按照最大行和最大列对表格取消合并单元格,比如样例文件,最大行数是5
,最大列数是8
,他就给扩展成5 * 8
的表格,而且数据自动向右填充。分析样例文件结果,需要获取的数据在前三行(起始编号0),第一行是获取1、3、5、7
列值(起始编号0),第二行是获取3、5、7
列值,第3行是获取3、7
列值 获取单个文件3行标黄文字程序如下:
#获取第一行数据 foriinrange(1,8,2): cell=tb.cell(0,i) txt=cell.textifcell.text!=''else''#无内容用空格占位 row.append(txt) #获取第二行数据 forjinrange(3,8,2): cell=tb.cell(1,j) txt=cell.textifcell.text!=''else''#无内容用空格占位 row.append(txt) #获取第三行数据 forkinrange(3,8,4): cell=tb.cell(2,k) txt=cell.textifcell.text!=''else''#无内容用空格占位 row.append(txt)row=[]
多个文件内容获取
单个文件内容获取了,批量就好说了,只要传入一个文件夹,遍历文件夹获取想要的文件就可以了,通用代码示例如下:
files=os.listdir(path) docx_list=[] forfinfiles: ifos.path.splitext(f)[1]=='.docx': docx_list.append(path+'\\'+f) else: passpath=input('请输入文件夹路径:')
通过如上代码获取了文件夹下所有的docx文件,采用list
嵌套list
的方法批量获取内容
forninrange(len(docx_list)): doc=Document(docx_list[n]) tb=doc.tables[0] #print(len(tb.rows),len(tb.columns))#行数、列数 row=[] #获取第一行数据 foriinrange(1,8,2): cell=tb.cell(0,i) txt=cell.textifcell.text!=''else''#无内容用空格占位 row.append(txt) #获取第二行数据 forjinrange(3,8,2): cell=tb.cell(1,j) txt=cell.textifcell.text!=''else''#无内容用空格占位 row.append(txt) #获取第三行数据 forkinrange(3,8,4): cell=tb.cell(2,k) txt=cell.textifcell.text!=''else''#无内容用空格占位 row.append(txt) mat.append(row)mat=[]
写入 excel
由于pandas
太庞大了,杀鸡焉用牛刀,此处采用xlwt
写入excel。
创建工作簿
workbook = xlwt.Workbook(encoding = 'utf-8')
添加sheet(支持覆盖写入)
xlsheet = workbook.add_sheet("Sheet1",cell_overwrite_ok=True)
添加表头
headlen=len(table_head) foriinrange(headlen): xlsheet.write(0,i,table_head[i])table_head=['xNAME','xSEX','xDANG','xZHI','xYUNA','xBAN','xHAO','xTIME','xPLACE']
写入数据
forjinrange(len(row)): xlsheet.write(i+1,j,mat[i][j])foriinrange(len(mat)):
保存工作簿 xlwt 主要是支持.xls
文件格式
workbook.save('学生实习鉴定表.xls')
执行程序便得到如下汇总内容:
真香
公众号回复 word2table 获取完整代码及示例文件,回复 pkbk 添加我为好友