python在word中生成表格,如何快速将word表格转化为excel表格
点击顶部的“编程学校”,选择设为“设为明星”
优质文章,第一时间送达!
大家好。今天一个公务员的小伙伴委托我帮他一个忙。大概有这么一句话(因涉及文档隐私,文中具体内容有所修改)
有将近2,600个格式相似的表格列,每个列都包含以下信息:
日期
发行单位
文号
标题
为列签名
需要将这三个粗体内容提取出来,存储在Excel表格中,表格样式如下:
即需要将收文时间、文件标题、文号填到指定位置,时间需要修改为标准格式。如果完全是手动复制修改时间,按照一次录入10s的时间,一分钟可以完成六次录入,那么最快也是需要的:
而这种格式规整的文件整理非常适合用Python来执行,好的,那么接下来请让Python出来,我会把必要的信息作为注释呈现在代码中。
首先,使用Python导入Word文件
#导入所需的库docxfromdocx importDocument#指定文件存储的路径=r c: \ users \ word.docx #读取文件document=Document(path)#读取word tables=Document . tables再把问题逐个划分中的所有表格,首先尝试获取第一个表格中第一个文件条目的三个所需信息。
#获取第一个表table0=tables[0]。仔细观察后,可以发现一个文件条目占用3行,所以在迭代表的所有行时,可以将步长设置为3。
注意表格,按照行和单元格清晰解析所需内容。
#在全局中放一个变量来统计填充序号n=0f或者在Range (0,len (table0.rows) 1,3): # date date=table0.cell(i,1)。text# title title=table0.cell(i 1,1).text.strip()#文件号dfn=tables [j]。单元格(I,3)。text.strip () print (n,date,tit,dfn)接下来,需要解决的是我们得到的时间是2/1,这是一个日/月形式。我们需要转换成YYYY-MM-DD格式,这就利用了strptime和strptime函数对datetime包:
Strptime:解析字符串中包含的时间
Strftime:转换成所需的时间格式
ImportdateTimen=0fori in range (0,len (table0.rows) 1,3): # date date=table0.cell(i,1)。text#部分条目有空时间,这里不要过多判断if / in date:date=datetime . datetime . strptime(date, % d/%m )。strptime( 2020-% m-% d )else:date=- # title title=table 0 . cell(I 1,1).text.strip()#文件号dfn=tables [j]。单元格(I,3)。text.strip () print (n,date,tit,dfn)这样一个表格的内容分析就完成了。注意这里用的是表[0],也就是第一个表,010-599。
n=0 for j in range(len(tables)):for I in range(0,len (tables [j])。rows) 1,3): try: # date date=tables[j]。单元格(I,1)。text if“/”in date:date=datetime . datetime . strp time(date, % d/%m )。strptime( 2020-% m-% d )else:date=- # title title=tables[j]。cell 1).text.strip()#文件号dfn=tables [j]。单元格(I,3)。text.strip () n=1print (n,date,title,dfn)exception as error:#捕捉异常,或者将其写入日志,以便于查看和管理打印(错误)继续信息。
fropenpyxlimportworkbook # instantiate WB=Workbook()# Get the current sheet sheet=WB . active # setup header header=[ serial number , receipt time , office number , file title , document number , remarks ]sheet.append(header)在最内层的解析循环的末尾添加以下代码
Row=[n,date,,title,dfn, ]工作表。append (row)保存线程的最后一个内存。
WB . save(r c:\ users \ 2020 420 . xlsx )运行10分钟左右,离开一会儿程序的执行就结束了。
最后附上完整的代码。代码很简单,理清思路最重要。
from docx importDocumentimportdatetimefromopenpyxl importWorkbookwb=Workbook()sheet=WB。活动标题=[序号, 收文时间, 办文编号, 文件标题, 文号, 备注]表。append(header)path=r c:\ Users \ word。docx Document=Document(path)tables=Document。对于范围内的j(len(tables)):对于范围内的I(0,len(tables[j])rows) 1,3):try:#日期日期=表格[j]的缩写.单元格(一,1).如果日期中有“/”,则显示文本:date=datetime。日期时间。strp时间(日期, %d/%m ).strftime( 2020-% m-% d )else:date=- #标题标题=表格[j]的缩写.cell(i 1,1).text.strip()#文号dfn=tables[j].cell(i,3).text.strip()n=1print(n,date,title,dfn)row=[n,date, ,title,dfn, ]sheet。追加(行)异常异常a错误:#捕获异常,也可以用原木写到日志里方便查看和管理打印(错误)继续web。保存(r c:\ Users \ 2020 04 20。xlsx’)回复下方「关键词」,获取优质资源回复关键词「pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》 电子版回复关键词「入门资料」,立即获取主页君整理的10 本计算机编程语言入门书的电子版回复关键词「m」,立即获取计算机编程语言精选优质文章合集回复关键词「书」数字」,将数字替换成0 及以上数字,有惊喜好礼哦~题图:像素,CC0授权。好文章,我在看
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。