Python办公自动化之从Word到Excel

简介: 大家好,今天有一个公务员的小伙伴委托我给他帮个忙,大概是有这样一份Word(由于涉及文件私密所以文中的具体内容已做修改

云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!

image

大家好,今天有一个公务员的小伙伴委托我给他帮个忙,大概是有这样一份Word(由于涉及文件私密所以文中的具体内容已做修改)

image

一共有近2600条类似格式的表格细栏,每个栏目包括的信息有:

日期
发文单位
文号
标题
签收栏
需要提取其中加粗的这三项内容到Excel表格中存储,表格样式如下:

image

也就是需要将收文时间、文件标题、文号填到指定位置,同时需要将时间修改为标准格式,如果是完全手动复制和修改时间,依照一个条目10s的时间计算,一分钟可以完成6条,那么最快也需要:

image

而这类格式规整的文件整理非常适合用Python来执行,好的那么接下来请Python出场,必要的信息我在代码中以注释信息呈现。

首先使用Python将Word文件导入

# 导入需要的库docx 
from docx import Document 
 
# 指定文件存放的路径 
path = r'C:\Users\word.docx'  
 
# 读取文件 
document = Document(path) 
 
# 读取word中的所有表格 
tables = document.tables 

再把问题逐个划分,首先尝试获取第一张表第一个文件条目的三个所需信息

# 获取第一张表 
table0 = tables[0] 

仔细观察可以发现一个文件条目占据了3行,所以对表格全部行循环迭代时可以设步长为3

image

注意观察表格,按照row和cell把所需内容解析清楚

# 在全局放一个变量用来计数填序号 
n = 0 
for i in range(0, len(table0.rows) + 1, 3): 
    # 日期 
    date = table0.cell(i, 1).text 
    # 标题 
    title = table0.cell(i + 1, 1).text.strip() 
    # 文号 
    dfn = tables[j].cell(i, 3).text.strip() 
    print(n, date, tite, dfn) 

接下来需要解决的是,时间我们获取的是 2/1 这种 日/月的形式。我们需要转化成 YYYY-MM-DD格式,而这利用到datetime包的strptime和strftime函数:

strptime: 解析字符串中蕴含的时间
strftime: 转化成所需的时间格式

import datetime 
 
n = 0 
for i in range(0, len(table0.rows) + 1, 3): 
    # 日期 
    date = table0.cell(i, 1).text 
    # 有的条目时间是空的,这里不做过多判别 
    if '/' in date: 
        date = datetime.datetime.strptime(date, '%d/%m').strftime('2020-%m-%d') 
    else: 
        date = '-' 
    # 标题 
    title = table0.cell(i + 1, 1).text.strip() 
    # 文号 
    dfn = tables[j].cell(i, 3).text.strip() 
    print(n, date, tite, dfn) 

这样一张表的内容解析就完成了,注意这里用的是table[0]即第一张表,遍历所有的表加一个嵌套循环就可以,另外也可以捕获异常增加程序灵活性

n = 0 
for j in range(len(tables)): 
    for i in range(0, len(tables[j].rows)+1, 3): 
        try: 
            # 日期 
            date = tables[j].cell(i, 1).text 
            if '/' in date: 
                date = datetime.datetime.strptime(date, '%d/%m').strftime('2020-%m-%d') 
            else: 
                date = '-' 
            # 标题 
            title = tables[j].cell(i + 1, 1).text.strip() 
            # 文号 
            dfn = tables[j].cell(i, 3).text.strip() 
            n += 1 
            print(n, date, title, dfn) 
        except Exception as error: 
            # 捕获异常,也可以用log写到日志里方便查看和管理 
            print(error) 
            continue 

信息解析和获取完成就可以导出了,用到的包是openpyxl

from openpyxl import Workbook 
 
# 实例化 
wb = Workbook() 
# 获取当前sheet 
sheet = wb.active 
# 设立表头 
header = ['序号', '收文时间', '办文编号', '文件标题', '文号', '备注'] 
sheet.append(header) 

在最内层解析循环的末尾加上如下代码即可

row = [n, date, ' ', title, dfn, ' '] 
sheet.append(row) 

线程的最后记得保存

wb.save(r'C:\Users\20200420.xlsx') 

运行时间在10分钟左右,大概离开了一会程序就执行结束了

最后附上完整代码,代码很简单,理清思路最重要

from docx import Document 
import datetime 
from openpyxl import Workbook 
 
wb = Workbook() 
sheet = wb.active 
header = ['序号', '收文时间', '办文编号', '文件标题', '文号', '备注'] 
sheet.append(header) 
 
 
path = r'C:\Users\word.docx' 
document = Document(path) 
tables = document.tables 
 
n = 0 
for j in range(len(tables)): 
    for i in range(0, len(tables[j].rows)+1, 3): 
        try: 
            # 日期 
            date = tables[j].cell(i, 1).text 
            if '/' in date: 
                date = datetime.datetime.strptime(date, '%d/%m').strftime('2020-%m-%d') 
            else: 
                date = '-' 
            # 标题 
            title = tables[j].cell(i + 1, 1).text.strip() 
            # 文号 
            dfn = tables[j].cell(i, 3).text.strip() 
            n += 1 
            print(n, date, title, dfn) 
            row = [n, date, ' ', title, dfn, ' '] 
            sheet.append(row) 
        except Exception as error: 
            # 捕获异常,也可以用log写到日志里方便查看和管理 
            print(error) 
            continue 
 
wb.save(r'C:\Users\20200420.xlsx') 

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-04-21
本文作者:陈熹
本文来自:“51CTO”,了解相关信息可以关注“51CTO”

相关文章
|
小程序
公众号如何添加附传Word、Excel、Pdf、PPT文档
公众号里添加一些文档给公众号粉丝下载,比如课件PPT、申请表Word文档、岗位需求Excel表、大赛入围/获奖名单等。公众号本身是不支持直接上传文件的,但我们可以通过附件小程序“间接”上传文件。
1885 0
|
人工智能 安全 虚拟化
Cua:Mac用户狂喜!这个开源框架让AI直接接管你的电脑,快速实现AI自动化办公
Cua是一个结合高性能虚拟化与AI代理能力的开源框架,能在Apple Silicon上以接近原生性能运行虚拟机,并让AI直接操作系统应用。
2540 17
Cua:Mac用户狂喜!这个开源框架让AI直接接管你的电脑,快速实现AI自动化办公
|
人工智能 算法 安全
使用CodeBuddy实现批量转换PPT、Excel、Word为PDF文件工具
通过 CodeBuddy 实现本地批量转换工具,让复杂的文档处理需求转化为 “需求描述→代码生成→一键运行” 的极简流程,真正实现 “技术为效率服务” 的目标。感兴趣的快来体验下把
1157 10
|
Web App开发 人工智能 数据可视化
猫头虎 推荐:国产开源AI工具 爱派(AiPy)|支持本地部署、自动化操作本地文件的AI办公神器
爱派(AiPy)是一款国产开源AI工具,支持本地部署与自动化操作,助力数据处理与办公效率提升。基于Python Use理念,AiPy让AI直接控制本地文件,简化繁琐任务,提供高效智能的解决方案,适用于数据工程师、分析师及日常办公用户。
5869 0
|
安全 数据库 数据安全/隐私保护
Python办公自动化实战:手把手教你打造智能邮件发送工具
本文介绍如何使用Python的smtplib和email库构建智能邮件系统,支持图文混排、多附件及多收件人邮件自动发送。通过实战案例与代码详解,帮助读者快速实现办公场景中的邮件自动化需求。
1193 0
|
前端开发 安全 Java
办公自动化必修课:用Python打造PDF全能处理工具
在职场中,PDF处理常令人崩溃:拆分、合并、加密等问题严重影响效率。本文教你用Python打造一个包含拆分、合并、加密、水印四大功能的PDF工具箱,通过实战代码提升办公自动化水平,让文档操作像拼乐高一样简单高效。
589 0
如何根据Excel某列数据为依据分成一个新的工作表
在处理Excel数据时,我们常需要根据列值将数据分到不同的工作表或文件中。本文通过Python和VBA两种方法实现该操作:使用Python的`pandas`库按年级拆分为多个文件,再通过VBA宏按班级生成新的工作表,帮助高效整理复杂数据。
|
数据采集 数据可视化 数据挖掘
用 Excel+Power Query 做电商数据分析:从 “每天加班整理数据” 到 “一键生成报表” 的配置教程
在电商运营中,数据是增长的关键驱动力。然而,传统的手工数据处理方式效率低下,耗费大量时间且易出错。本文介绍如何利用 Excel 中的 Power Query 工具,自动化完成电商数据的采集、清洗与分析,大幅提升数据处理效率。通过某美妆电商的实战案例,详细拆解从多平台数据整合到可视化报表生成的全流程,帮助电商从业者摆脱繁琐操作,聚焦业务增长,实现数据驱动的高效运营。
|
存储 安全 大数据
网安工程师必看!AiPy解决fscan扫描数据整理难题—多种信息快速分拣+Excel结构化存储方案
作为一名安全测试工程师,分析fscan扫描结果曾是繁琐的手动活:从海量日志中提取开放端口、漏洞信息和主机数据,耗时又易错。但现在,借助AiPy开发的GUI解析工具,只需喝杯奶茶的时间,即可将[PORT]、[SERVICE]、[VULN]、[HOST]等关键信息智能分类,并生成三份清晰的Excel报表。告别手动整理,大幅提升效率!在安全行业,工具党正碾压手动党。掌握AiPy,把时间留给真正的攻防实战!官网链接:https://www.aipyaipy.com,解锁更多用法!

热门文章

最新文章

推荐镜像

更多