找回密码
 会员注册
查看: 31|回复: 0

python-自动化篇-办公-一键将word中的表格提取到excel文件中

[复制链接]

4

主题

0

回帖

13

积分

新手上路

积分
13
发表于 2024-9-4 17:08:51 | 显示全部楼层 |阅读模式
文章目录代码工作中,经常需要将Word文档中的表格粘贴到Excel文件中,以便汇总及分析。一个一个复制粘贴,非常不方便,还是Python自动化操作,省心省力。要求如下图所示,即将word中的所有表格,转存到excel文件的工作表里。importosfromdocximportDocumentfromopenpyxlimportWorkbook#获取待处理的文件的路径path='word文件'#文件所在文件夹files=[path+"\\"+iforiinos.listdir(path)]#获取文件夹下的文件名,并拼接完整路径forfileinfiles:doc=Document(file)wb=Workbook()wb.remove(wb.worksheets[0])#删除工作簿自带的工作表forindex,tableinenumerate(doc.tables,start=1):#从1开始给表格编号ws=wb.create_sheet(f"Sheet{index}")#创建新工作表,以"Sheet"+word中表格的编号命名foriinrange(len(table.rows)):#遍历word中表格的所有行row_data=[]#储存表格中每行的数据forjinrange(len(table.columns)):#遍历word中表格的所有列row_data.append(table.cell(i,j).text)ws.append(row_data)#每取一行就写入数据到Excel表的行中wb.save("excel文件\\{}.xlsx".format(file.split("\\")[1].split(".")[0]))#保存excel文件1234567891011121314151617181920212223以上,先导入相关模块。os用于获取待处理word文件的路径;docx用于读取word文件;openpyxl用于操作excel文件。将所有word文件的路径存入列表files中。然后逐个通过Document打开,并使用Workbook()创建Excel工作簿,以接收来自于word文件中的数据。因为创建工作簿后,Excel会自动新建一个名为"Sheet"的空白表格,但我们想用自己命名的表格,所以使用remove()将自动新建的表删掉了。然后遍历word文件中的所有表格,并读取其中的数据。由于我们想让Excel工作簿中的表的序号与Word中的一致,所以使用enmuerate给Word中的表格进行编号,start=1表示从1开始,不然会默认从0开始。随后使用wb.create_sheet新建一个工作表,其表名就用字符串"Sheet"加上上面的编号。其中f"{}"是格式化字符串方法,从Python3.6开始加入标准库,是一种更灵活好用的方法。如下有四种方式处理字符串,结果完全一样,不过第一种最好用,墙裂推荐。name="Trump"age=70f"你好,{name},你的年龄是{age}岁."123'运行运行‘你好,Trump,你的年龄是70岁.’"你好,{},你的年龄是{}岁.".format(name,age)1‘你好,Trump,你的年龄是70岁.’"你好,%s,你的年龄是%s岁."%(name,age)1‘你好,Trump,你的年龄是70岁.’"你好,"+name+",你的年龄是"+str(age)+"岁."1‘你好,Trump,你的年龄是70岁.’然后遍历word中表格的所有行和列,将每行的数据存入列表row_data,然后通过append方法马上增加到Excel表中最后一个数据下面。append方法可以将一个列表中的所有元素写入到excel表的一行,一个元素占一个单元格(如下图),够智能的吧?处理完一个word文件,就保存一下数据。为了使保存的excel文件名与word文件名一致,使用了file.split("\\")[1].split(".")[0])。其中file的内容如下。file.split("\\")[1]就得到了’采购报告.docx’,'采购报告.docx'.split(".")[0]就得到了“采购报告”。file1‘你好,Trump,你的年龄是70岁.’‘你好,Trump,你的年龄是70岁.’‘你好,Trump,你的年龄是70岁.’‘你好,Trump,你的年龄是70岁.’‘word文件\采购报告.docx’file.split("\\")[1]1‘采购报告.docx’'采购报告.docx'.split(".")[0]1'运行运行‘采购报告’结果图如下。word文件中有多少个表格,就会在excel文件中生成多少个sheet。而且,如果在word文件中有合并单元格,那到excel文件中,这些单元格会拆分,并填充相同的内容,更利于数据分析。当然,结果excel文件中的格式就不是那么好看了,需要手动调整一下。代码importosfromdocximportDocumentfromopenpyxlimportWorkbook#获取待处理的文件的路径path='word文件'#文件所在文件夹files=[path+"\\"+iforiinos.listdir(path)]#获取文件夹下的文件名,并拼接完整路径forfileinfiles:doc=Document(file)wb=Workbook()wb.remove(wb.worksheets[0])#删除工作簿自带的工作表forindex,tableinenumerate(doc.tables,start=1):#从1开始给表格编号ws=wb.create_sheet(f"Sheet{index}")#创建新工作表,以"Sheet"+word中表格的编号命名foriinrange(len(table.rows)):#遍历word中表格的所有行row_data=[]#储存表格中每行的数据forjinrange(len(table.columns)):#遍历word中表格的所有列row_data.append(table.cell(i,j).text)ws.append(row_data)#每取一行就写入数据到Excel表的行中wb.save("excel文件\\{}.xlsx".format(file.split("\\")[1].split(".")[0]))#保存excel文件12345678910111213141516171819202122
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-12 19:58 , Processed in 0.561220 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表