当前位置: 首页 > news >正文

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

文章目录

  • 代码

工作中,经常需要将Word文档中的表格粘贴到Excel文件中,以便汇总及分析。一个一个复制粘贴,非常不方便,还是Python自动化操作,省心省力。要求如下图所示,即将word中的所有表格,转存到excel文件的工作表里。
请添加图片描述

import os
from docx import Document
from openpyxl import Workbook#获取待处理的文件的路径
path='word文件'  #文件所在文件夹
files = [path+"\\"+i for i in os.listdir(path)] #获取文件夹下的文件名,并拼接完整路径for file in files:doc = Document(file)wb = Workbook()wb.remove(wb.worksheets[0])#删除工作簿自带的工作表for index, table in enumerate(doc.tables, start=1): #从1开始给表格编号ws = wb.create_sheet(f"Sheet{index}")#创建新工作表,以"Sheet" + word中表格的编号命名for i in range(len(table.rows)): #遍历word中表格的所有行row_data = [] #储存表格中每行的数据for j in range(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文件

以上,先导入相关模块。os用于获取待处理word文件的路径;docx用于读取word文件;openpyxl用于操作excel文件。将所有word文件的路径存入列表files中。然后逐个通过Document打开,并使用Workbook()创建Excel工作簿,以接收来自于word文件中的数据。因为创建工作簿后,Excel会自动新建一个名为"Sheet"的空白表格,但我们想用自己命名的表格,所以使用remove()将自动新建的表删掉了。

然后遍历word文件中的所有表格,并读取其中的数据。由于我们想让Excel工作簿中的表的序号与Word中的一致,所以使用enmuerateWord中的表格进行编号,start=1表示从1开始,不然会默认从0开始。

随后使用wb.create_sheet新建一个工作表,其表名就用字符串"Sheet"加上上面的编号。其中f"{}"是格式化字符串方法,从Python 3.6开始加入标准库,是一种更灵活好用的方法。如下有四种方式处理字符串,结果完全一样,不过第一种最好用,墙裂推荐。

name = "Trump"
age = 70
f"你好, {name}, 你的年龄是{age}岁."

‘你好, Trump, 你的年龄是70岁.’

"你好, {}, 你的年龄是{}岁.".format(name,age)

‘你好, Trump, 你的年龄是70岁.’

"你好, %s, 你的年龄是%s岁." % (name, age)

‘你好, Trump, 你的年龄是70岁.’

"你好, " +name +", 你的年龄是" + str(age) + "岁."

‘你好, 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]就得到了“采购报告”。

file

‘你好, Trump, 你的年龄是70岁.’
‘你好, Trump, 你的年龄是70岁.’
‘你好, Trump, 你的年龄是70岁.’
‘你好, Trump, 你的年龄是70岁.’
‘word文件\采购报告.docx’

file.split("\\")[1]

‘采购报告.docx’

'采购报告.docx'.split(".")[0]

‘采购报告’

结果图如下。word文件中有多少个表格,就会在excel文件中生成多少个sheet。而且,如果在word文件中有合并单元格,那到excel文件中,这些单元格会拆分,并填充相同的内容,更利于数据分析。当然,结果excel文件中的格式就不是那么好看了,需要手动调整一下。
请添加图片描述

代码

import os
from docx import Document
from openpyxl import Workbook#获取待处理的文件的路径
path='word文件'  #文件所在文件夹
files = [path+"\\"+i for i in os.listdir(path)] #获取文件夹下的文件名,并拼接完整路径for file in files:doc = Document(file)wb = Workbook()wb.remove(wb.worksheets[0])#删除工作簿自带的工作表for index, table in enumerate(doc.tables, start=1): #从1开始给表格编号ws = wb.create_sheet(f"Sheet{index}")#创建新工作表,以"Sheet" + word中表格的编号命名for i in range(len(table.rows)): #遍历word中表格的所有行row_data = [] #储存表格中每行的数据for j in range(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文件

在这里插入图片描述

http://www.lryc.cn/news/299639.html

相关文章:

  • C#,数值计算,矩阵的行列式(Determinant)、伴随矩阵(Adjoint)与逆矩阵(Inverse)的算法与源代码
  • 人工智能|推荐系统——基于tensorflow的个性化电影推荐系统实战(有前端)
  • Hive SQL编译成MapReduce任务的过程
  • 【C++】快速上手map、multimap、set、multiset
  • 【分享】图解ADS+JLINK调试ARM
  • 反无人机系统技术分析,无人机反制技术理论基础,无人机技术详解
  • Kotlin和Java 单例模式
  • 软考 系统分析师系列知识点之信息系统战略规划方法(9)
  • 政安晨:示例演绎TensorFlow的官方指南(一){基础知识}
  • node - 与数据库交互
  • 速盾:2024年cdn在5g时代重要吗
  • 微信小程序(四十一)wechat-http的使用
  • 所有设计模式大全及学习链接
  • 【Java程序设计】【C00264】基于Springboot的原创歌曲分享平台(有论文)
  • 2024年,要特别注意这两个方位
  • 【Chrono Engine学习总结】5-sensor-5.1-sensor基础并创建一个lidar
  • springboot/ssm学生信息管理系统Java学生在线选课考试管理系统
  • three.js 箭头ArrowHelper的实践应用
  • 力扣hot2--哈希
  • 【正在更新】从零开始认识语音识别:DNN-HMM混合系统语音识别(ASR)原理
  • thinkphp+vue企业产品展示网站f7enu
  • 在Ubuntu22.04上部署ComfyUI
  • Springboot+vue的社区养老服务平台(有报告)。Javaee项目,springboot vue前后端分离项目
  • 计算机设计大赛 深度学习+opencv+python实现车道线检测 - 自动驾驶
  • 机器学习2---逻辑回归(基础准备)
  • JVM体系
  • .NET命令行(CLI)常用命令
  • 六、Redis之数据持久化及高频面试题
  • 爬虫——ajax和selenuim总结
  • 【Python】单元测试unittest框架