ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Python操作Word和PowerPoint文件

Python操作Word和PowerPoint文件 在日常工作中有很多简单重复的劳动其实完全可以交给Python程序比如根据样板文件模板文件批量的生成很多个Word文件或PowerPoint文件。Word是微软公司开发的文字处理程序相信大家都不陌生日常办公中很多正式的文档都是用Word进行撰写和编辑的目前使用的Word文件后缀名一般为.docx。PowerPoint是微软公司开发的演示文稿程序是微软的Office系列软件中的一员被商业人士、教师、学生等群体广泛使用通常也将其称之为“幻灯片”。在Python中可以使用名为python-docx的三方库来操作Word可以使用名为python-pptx的三方库来生成PowerPoint。操作Word文档我们可以先通过下面的命令来安装python-docx三方库。pip install python-docx按照官方文档的介绍我们可以使用如下所示的代码来生成一个简单的Word文档。from docx import Document from docx.shared import Cm, Pt from docx.document import Document as Doc # 创建代表Word文档的Doc对象 document Document() # type: Doc # 添加大标题 document.add_heading(快快乐乐学Python, 0) # 添加段落 p document.add_paragraph(Python是一门非常流行的编程语言它) run p.add_run(简单) run.bold True run.font.size Pt(18) p.add_run(而且) run p.add_run(优雅) run.font.size Pt(18) run.underline True p.add_run(。) # 添加一级标题 document.add_heading(Heading, level 1, level1) # 添加带样式的段落 document.add_paragraph(Intense quote, styleIntense Quote) # 添加无序列表 document.add_paragraph( first item in unordered list, styleList Bullet ) document.add_paragraph( second item in ordered list, styleList Bullet ) # 添加有序列表 document.add_paragraph( first item in ordered list, styleList Number ) document.add_paragraph( second item in ordered list, styleList Number ) # 添加图片注意路径和图片必须要存在 document.add_picture(guido.jpg, widthCm(5.2)) # 添加分节符 document.add_section() records ( (骆昊, 男, 1995-5-5), (孙美丽, 女, 1992-2-2) ) # 添加表格 table document.add_table(rows1, cols3) table.style Dark List hdr_cells table.rows[0].cells hdr_cells[0].text 姓名 hdr_cells[1].text 性别 hdr_cells[2].text 出生日期 # 为表格添加行 for name, sex, birthday in records: row_cells table.add_row().cells row_cells[0].text name row_cells[1].text sex row_cells[2].text birthday # 添加分页符 document.add_page_break() # 保存文档 document.save(demo.docx)提示上面代码第7行中的注释# type: Doc是为了在PyCharm中获得代码补全提示因为如果不清楚对象具体的数据类型PyCharm无法在后续代码中给出Doc对象的代码补全提示。执行上面的代码打开生成的Word文档效果如下图所示。对于一个已经存在的Word文件我们可以通过下面的代码去遍历它所有的段落并获取对应的内容。from docx import Document from docx.document import Document as Doc doc Document(demo.docx) # type: Doc for no, p in enumerate(doc.paragraphs): print(no, p.text)提示使用刚刚生成的demo.docx文档读取到的内容如下所示。可以发现读取的内容并不是期望的有些格式的内容无法读取。讲到这里相信很多读者已经想到了我们可以把上面的离职证明制作成一个模板文件把姓名、身份证号、入职和离职日期等信息用占位符代替这样通过对占位符的替换就可以根据实际需要写入对应的信息这样就可以批量的生成Word文档。按照上面的思路我们首先编辑一个离职证明的模板文件如下图所示。接下来我们读取该文件将占位符替换为真实信息就可以生成一个新的Word文档如下所示。from docx import Document from docx.document import Document as Doc # 将真实信息用字典的方式保存在列表中 employees [ { name: 骆昊, id: 100200198011280001, sdate: 2008年3月1日, edate: 2012年2月29日, department: 产品研发, position: 架构师, company: 成都华为技术有限公司 }, { name: 王大锤, id: 510210199012125566, sdate: 2019年1月1日, edate: 2021年4月30日, department: 产品研发, position: Python开发工程师, company: 成都谷道科技有限公司 }, { name: 李元芳, id: 2102101995103221599, sdate: 2020年5月10日, edate: 2021年3月5日, department: 产品研发, position: Java开发工程师, company: 同城企业管理集团有限公司 }, ] # 对列表进行循环遍历批量生成Word文档 for emp_dict in employees: # 读取离职证明模板文件 doc Document(离职证明模板.docx) # type: Doc # 循环遍历所有段落寻找占位符 for p in doc.paragraphs: if { not in p.text: continue # 不能直接修改段落内容否则会丢失样式 # 所以需要对段落中的元素进行遍历并进行查找替换 for run in p.runs: if { not in run.text: continue # 将占位符换成实际内容 start, end run.text.find({), run.text.find(}) key, place_holder run.text[start 1:end], run.text[start:end 1] run.text run.text.replace(place_holder, emp_dict[key]) # 每个人对应保存一个Word文档 doc.save(f{emp_dict[name]}离职证明.docx)执行上面的代码会在当前路径下生成三个Word文档如下图所示。生成PowerPoint首先我们需要安装名为python-pptx的三方库命令如下所示。pip install python-pptx用Python操作PowerPoint的内容因为实际应用场景不算很多我不打算在这里进行赘述有兴趣的读者可以自行阅读python-pptx的官方文档下面仅展示一段来自于官方文档的代码。from pptx import Presentation # 创建幻灯片对象 pres Presentation() # 选择母版添加一页 title_slide_layout pres.slide_layouts[0] slide pres.slides.add_slide(title_slide_layout) # 获取标题栏和副标题栏 title slide.shapes.title subtitle slide.placeholders[1] # 编辑标题和副标题 title.text Welcome to Python subtitle.text Life is short, I use Python # 选择母版添加一页 bullet_slide_layout pres.slide_layouts[1] slide pres.slides.add_slide(bullet_slide_layout) # 获取页面上所有形状 shapes slide.shapes # 获取标题和主体 title_shape shapes.title body_shape shapes.placeholders[1] # 编辑标题 title_shape.text Introduction # 编辑主体内容 tf body_shape.text_frame tf.text History of Python # 添加一个一级段落 p tf.add_paragraph() p.text X\max 1989 p.level 1 # 添加一个二级段落 p tf.add_paragraph() p.text Guido began to write interpreter for Python. p.level 2 # 保存幻灯片 pres.save(test.pptx)运行上面的代码生成的PowerPoint文件如下图所示。总结用Python程序解决办公自动化的问题真的非常酷它可以将我们从繁琐乏味的劳动中解放出来。写这类代码就是去做一件一劳永逸的事情写代码的过程即便不怎么愉快使用这些代码的时候应该是非常开心的。
返回列表