| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> 人事小姐姐找我提需求:一键生成这个月的假条!还好我会... -> 正文阅读 |
|
[Python知识库]人事小姐姐找我提需求:一键生成这个月的假条!还好我会... |
前言今天突然人事小姐姐给我送早餐!吓得我不知所措!难道是想让我做她男朋友?结果她一开口,我就知道是我想多了!原来小姐姐偷懒,上个月的假条没有统计!结果好几百条数据在那里,八号就要发工资了,加班加点也赶不上了,算了算了。谁让你长的好看呢,再说早餐都吃了,吃人手短!还好我会Python!不然还真难倒我了!不多BB,上干货! 主题开始本文就将基于一个真实的办公案例进行讲解如何提取Excel内容并创建Word,主要将涉及以下三个知识点
” 需求描述你是公司的底层小虾米,前段时间收集了公司各个部门的请假信息汇总表如下: 现在你需要根据表格中每个人的信息依次生成各自的请假条如下: 需求的特殊性在于没有现成的模板,因此需要在代码中同时完成模板的制作和文字、段落样式设计。 比较复杂的文字版面更建议直接设计好模板,以及确定好程序识别位置的定位符,详细内容可以参考之前的教程:不方便翻看的可以点击蓝色字体跳转!点击这里 领取 逻辑分析整个需求的实现逻辑很简单,主要分为以下 2 步:
” 逻辑并不困难,但是复杂的地方在于用代码输出请假条的过程,包括加粗、字号、下划线等等。 代码实现需求中的请假信息汇总表为 Leave.xlsx,已放链接供练习下载 首先读取请假信息表,尝试获取除表头外实际信息的 5 个参数: from openpyxl import load_workbook path = r'C:\xxx' # 路径为Excel 文件所在的位置,可按实际情况更改 workbook = load_workbook(path + r'\Leave.xlsx') sheet = workbook.active n = 0 for row in sheet.rows: if n: for cell in row: print(cell.value) n += 1 通过 for row in sheet.rows 和 for cell in row 就可以迭代 Excel 中有数据的每个单元格了。 循环体中加上对 n 的判断是为了跳过表头 如果让输出更加直观可以稍微修改上面的代码: n = 0 for row in sheet.rows: if n: for cell in row: print(cell.value, end=', ') print('') n += 1 信息已经获取到了,但我们也发现申请日期是 datetime 形式,因此我们需要利用 datetime 库获取其中的日期成分,也可以转化为字符串后利用空格切片: n = 0 for row in sheet.rows: if n: name = row[0].value department = row[1].value reason = row[2].value days = row[3].value date = str(row[4].value).split()[0] print(name, department, reason, days, date) n += 1 提取到信息后就可以在循环体内建立个“请假条函数”,即把每条记录的 5 个变量传入函数,在函数中生成完整请假条并保存,即修改成如下形式: def request_for_leave(name, department, reason, days, date): pass n = 0 for row in sheet.rows: if n: name = row[0].value department = row[1].value reason = row[2].value days = row[3].value date = str(row[4].value).split()[0] request_for_leave(name, department, reason, days, date) n += 1 生成请假条中,首先导入依赖的库 python-docx 以及跟样式设置有关的相应方法: # 读取 Word 文件 from docx import Document # 文件涉及段落样式修改 from docx.enum.text import WD_PARAGRAPH_ALIGNMENT # 文件涉及文字样式修改:颜色修改、字号调整 from docx.shared import RGBColor, Pt # 设置中文字体 from docx.oxml.ns import qn 接下来就是依次添加各部分的内容和样式,因为全文的字体均为楷体,可以在函数体的最末尾一并修改。首先实例化文件后添加“请假条”: def request_for_leave(name, department, reason, days, date): doc = Document() heading_1 = '请 假 条' paragraph_1 = doc.add_heading(heading_1, level=1) # 居中对齐 paragraph_1.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 标题要打,单独修改较大字号 for run in paragraph_1.runs: run.font.size = Pt(17) 如果对上面的代码单独输出会发现标题颜色是蓝色,这是以 .add_heading() 添加标题默认的颜色。 最后也可以统一修改 对于“尊敬的领导:”这一行基本同理,但不需要修改字号: greeting_word = '尊敬的领导:' paragraph_2 = doc.add_paragraph(greeting_word) 接下来是核心请假条的正文了,从需求中的样式上可以看出,整句话中有一些文字块是固定的,包括“本人” “、所在部门” “,由于” “需请假” “天。”,而几个文字块之间的信息是根据不同人的情况而不同,并且需要添加下划线。 简单的逻辑就是将参数对应的文字块添加好下划线之后,和固有不变的变量进行拼接,就可以形成完整的段落了: word_1 = " 本人" word_2 = ",所在部门" word_3 = ",由于" word_4 = ",需请假" word_5 = "天。" paragraph_3 = doc.add_paragraph() paragraph_3.add_run(word_1) paragraph_3.add_run(name).underline = True paragraph_3.add_run(word_2) paragraph_3.add_run(department).underline = True paragraph_3.add_run(word_3) paragraph_3.add_run(reason).underline = True paragraph_3.add_run(word_4) paragraph_3.add_run(str(days)).underline = True paragraph_3.add_run(word_5) # 设置下划线 paragraph_3.paragraph_format.line_spacing = 1.5 代码中 .underline = True 就是对参数对应的文字块添加下划线 接下来的申请人和日期填写就和上面基本类似。 比较大的区别在于添加了一行新的命令 paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT, 这行命令能够将这两个段落右对齐: word_6 = '申请人:' paragraph_4 = doc.add_paragraph() paragraph_4.add_run(word_6) paragraph_4.add_run(name).underline = True paragraph_4.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT word_7 = '日期:' sign_date = "{}年{}月{}日".format(date.split('-')[0], date.split('-')[1], date.split('-')[2]) paragraph_5 = doc.add_paragraph() paragraph_5.add_run(word_7) paragraph_5.add_run(sign_date).underline = True paragraph_5.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT 最后就是统一修改字体为楷体,中文字体修改比较麻烦,不像英文字体只需要指定如 run.font.name = 'Arial' 就可以,需要额外的几行代码。最后记得保存: for paragraph in doc.paragraphs: for run in paragraph.runs: # 统一修改颜色 run.font.color.rgb = RGBColor(0, 0, 0) run.font.name = '楷体' r = run._element.rPr.rFonts r.set(qn('w:eastAsia'), '楷体') doc.save(path + "\{}-请假条.docx".format(name)) 运行上述代码即可针对每个人产生相应的请假条: 至此,我们就成功利用Python实现了开头的需求,解放双手。注意本案例同样适用于邀请函、证明等各类文书的制作,大家可以举一反三。 结束如果还是有小伙伴通过文章感觉没学会的!需要完整视频教程或者源码的可以点击蓝色字体:点击这里 领取?或者加Q羣:754370353 自取即可,对于这快有疑问的,有不会的小伙伴可以直接进去提问哈!小编看到会第一时间回复大家! 如果觉得此篇文章对你有帮助记得给小编点赞评论哦!能转发一下就更好拉!谢谢大家! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/25 16:12:09- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |