首页 文章 精选 留言 我的

精选列表

搜索[办公软件],共10000篇文章
优秀的个人博客,低调大师

Python办公自动化之从Word到Excel

云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 大家好,今天有一个公务员的小伙伴委托我给他帮个忙,大概是有这样一份Word(由于涉及文件私密所以文中的具体内容已做修改) 一共有近2600条类似格式的表格细栏,每个栏目包括的信息有: 日期发文单位文号标题签收栏需要提取其中加粗的这三项内容到Excel表格中存储,表格样式如下: 也就是需要将收文时间、文件标题、文号填到指定位置,同时需要将时间修改为标准格式,如果是完全手动复制和修改时间,依照一个条目10s的时间计算,一分钟可以完成6条,那么最快也需要: 而这类格式规整的文件整理非常适合用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 注意观察表格,按照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”

优秀的个人博客,低调大师

我,一台被远程办公逼疯了的手机

大家好,我是王雪梨的手机。 今天是我和她宅在一起的第三周,不知道她感觉怎么样,反正我快疯了。 7:00AM 上班第一天,早上七点我照常叫她起床,并且做好了她闭眼选择「稍后提醒」的准备。 没想到她说了句「嘿,Siri,一个半小时之后叫我起床」就又去睡觉了。 第一天就准备迟到?看来她是要打破一周迟到三次的记录了。 8:30AM 八点半,她终于起床了。按照她平时的习惯,怎么着也得收拾一个小时才能出门,铁定要迟到了。 我的余光看到她在吹头发、画眉毛,然后……就没了?平时的防晒粉底遮瑕眼影眼线腮红修容口红呢? 为什么外套底下还是睡裤?是谁给你这么邋遢的勇气,梁静茹吗?🤷‍♀️ 10:00AM 原来是开什么视频会,怪不得。🤷‍♀️ 也真是难为她了,还要从这么乱的房间里找到一块整洁的背景。 诶诶诶,我眼前怎么黑了。她的猫又来捣乱了,快把它扔下去! 11:30AM 长时间的自我隔离,甚至让她有了自言自语的习惯。 「今天方哥的脸好像更方了」 「他们的睡衣为啥都是格子的」 「咋还没开完,我都饿了」 …… 喂,声音还没关呢!🤦‍♀️ 12:00PM 终于到了午饭时间,本来以为我可以趁她做饭的时候休息一下,结果竟然被一起带进了厨房? 哦,忘了她根本就不会做饭了,得看菜谱🤷‍♀️ 经过一个小时「兵荒马乱」的做饭过程,厨房早就成了「战损版」,甚至连我身上都溅满了油花。 没等休息又被她拖去拍照修图发朋友圈…… 啊,我累了,我真的累了。 3:55PM 最近口罩好像成了紧俏货,每天听她打电话都是和朋友说哪里有口罩快去抢之类的。 这不,我最近又多了个任务,每天下午 3:55 提醒她去抢口罩。 时间一到,她就一直猛戳「立即购买」,就算快把我戳出内伤了也只能得到「已售罄」的结果。 7:00PM 下班了!我终于能趁她看电视的时候休息一会儿了。 「叮」——又有 app 来敲门了,让我康康是哪个这么没有眼力见儿。 哦,是飞书啊🙂 还没等我反应过来,她已经听出提示音,捞起我面带职业假笑回了一句「在的」…… 12:00AM 灰姑娘一到午夜 12 点就会和王子分离,而我到那时候就变成了她和盒马小哥的鹊桥。 「鸡胸、西蓝花、薯片、酸奶……」她边选购边期待着和盒马小哥明天的相遇。 因为选购太久跳出来「小哥已约满」的提示,让她那晚比失恋还伤心。 不用早起通勤、不用化妆、上班休息全都在家..... 原来这就是她一直念叨的什么「SOHO」,这么看来也没有多好。 虽然这段时间有机会体验了一把人类中的「宅」,但我还是想用我的镜头看到上班路上朝气蓬勃的人类、晒太阳的流浪猫、傍晚的夕阳,让我的运动传感器也感受一下很久都没有过的悠闲散步。 你们呢?等这段时间过去,最想带着你们的手机拍摄什么风景呢? 1:00AM 晚上一点,正准备睡觉的我突然被一把捞起来。 只见雪梨打开钉钉,打了一个下班卡……

优秀的个人博客,低调大师

python自动化办公:玩转word之页眉页脚秘笈

节将就python操作word的页眉页脚技巧做深入介绍。 使用页眉和页脚 python操作word的页眉页脚技巧做深入介绍 Word支持页眉和页脚。页眉是出现在每个页面的上边距区域中的文本,与文本主体分开,并且通常传达上下文信息,例如文档标题,作者,创建日期或页码。文档中的页眉在页面之间是相同的,内容上只有很小的差异,例如更改部分标题或页码。页眉也称为运行头。 一个页面页脚中的每个日日夜夜,只不过它出现在页面底部的页头类似。它不应与脚注混淆,脚注在页面之间不一致。为了简洁起见,这里经常使用术语标题来指代可以是页眉或页脚对象的内容,信任读者以理解它对两种对象类型的适用性。 访问节的标题 页眉和页脚与一个部分相关联; 这允许每个部分具有不同的页眉和/或页脚。例如,横向部分可能具有比纵向部分更宽的标题。 每个section对象都有一个.header属性,提供对该节的对象的访问: >>>document = Document() >>>section = document.sections[0] >>>header = section.header >>>header <docx.section._Header object at 0x...> 甲目的是总是存在于Section.header,即使当没有报头该节限定。实际标头定义的存在表示为_Header.is_linked_to_previous: >>>header.is_linked_to_previous True 值为True表示对象不包含标题定义,该节将显示与上一节相同的标题。这种"继承"行为是递归的,因此"链接"标题实际上从具有标题定义的第一个前一部分获得其定义。此"链接"状态在Word UI中显示为"与以前相同"。 新文档没有标题(在它包含的单个部分),因此 .is_linked_to_previous就是True这种情况。请注意,这种情况可能有点违反直觉,因为没有要链接的前一个节头。在此"无前一个标题"的情况下,不显示标题。 添加标题(简单情况) 只需编辑 对象的内容即可将标题添加到新文档中。一个对象是一个"故事"容器及其内容进行编辑,就像一个对象。请注意,与新文档一样,新标题已包含单个(空)段落: >>>paragraph = header.paragraphs[0] >>>paragraph.text = "Title of my document" 添加内容(甚至只是访问header.paragraphs)的行为添加了标头定义并 另请注意,添加内容(甚至只是访问header.paragraphs)的行为添加了标头定义并更改了以下状态.is_linked_to_previous: >>>header.is_linked_to_previous False 添加"分区"标题内容 具有多个"区域"的标题通常使用精心放置的制表位来完成。中心和右对齐"区域"所需的制表位是HeaderWord中潜在样式的一部分 ,但该样式不存在于默认python-docx 模板中,需要添加: >>> fromdocx.enum.styleimportWD_STYLE_TYPE >>> fromdocx.enum.textimportWD_TAB_ALIGNMENT >>>styles = document.styles >>>style = styles.add_style("Header", WD_STYLE_TYPE.PARAGRAPH) >>>style.base_style = styles["Normal"] >>>tab_stops = style.paragraph_format.tab_stops >>>tab_stops.add_tab_stop(Inches(3.25), WD_TAB_ALIGNMENT.CENTER) >>>tab_stops.add_tab_stop(Inches(6.5), WD_TAB_ALIGNMENT.RIGHT) 如果您使用的是自定义模板而不是python-docx默认模板,那么在模板中定义该样式可能是有意义的。 一旦Header式存在时,突片用于分离左,中和右对齐头内容: >>>paragraph = header.paragraphs[0] >>>paragraph.text = "Left Text Center Text Right Text" >>>paragraph.style = document.styles["Header"] 突片用于分离左,中和右对齐头内容: 删除标题 可以通过分配True其 .is_linked_to_previous属性来删除不需要的标头: >>>header.is_linked_to_previous =True >>>header.is_linked_to_previous True True分配给 标题时,标题的内容将被不可逆转地删除.is_linked_to_previous。 理解多节文档中的标题 "刚开始编辑"方法适用于简单的情况,但为了理解多节文档中的标题行为,一些简单的概念将有所帮助。简而言之: 1. 每个部分都可以有自己的标头定义(但不必)。 2. 缺少标头定义的部分会继承之前部分的标头。当存在定义而不存在_Header.is_linked_to_previous定义时,该属性仅反映标头定义的False存在True。 3. 缺少标头定义是默认状态。新文档没有已定义的标题,也没有新插入的部分。.is_linked_to_previous报告 True这两种情况。 4. 如果_Header对象的内容具有标题定义,则它是自己的内容。如果不是,它的内容是第一现有节的不具有标题的定义。如果没有节具有标题定义,则在第一节中添加新节,并且所有其他节继承该节。这种添加标头定义是在第一次访问标头内容时发生的,可能是通过引用 header.paragraphs。 添加标题定义(一般情况) 可以通过赋予False其.is_linked_to_previous属性来为缺少一个节的节提供显式标头定义 : >>>header.is_linked_to_previous True >>>header.is_linked_to_previous =False >>>header.is_linked_to_previous False 新添加的标头定义包含一个空段落。请注意,以这种方式保留标题偶尔会有用,因为它有效地"关闭"该部分的标题以及之后的标题,直到具有已定义标题的下一部分。 分配False给.is_linked_to_previous已具有标头定义的标头不会执行任何操作。 自动定位继承的内容 编辑标题的内容会编辑源标题的内容,同时考虑任何"继承"。因此,例如,如果第2节标题继承自第1节并且您编辑第2节标题,则实际上更改了第1节标题的内容。除非您首先明确指定False其.is_linked_to_previous属性,否则不会为第2节添加新的标头定义。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册