发布于2022-11-30 03:50 阅读(1077) 评论(0) 点赞(4) 收藏(3)
系列教程:
Python 自动化教程(1) 概述,第一篇 Excel自动化
Python 自动化教程(2) : Excel自动化:使用pandas库
Python 自动化教程(3) : 自动生成PPT文件 Part 1
Python 自动化教程(4) : 自动生成PPT文件 Part 2
本篇介绍使用 office 库处理 Word文件.
office库是笔者写的python库,用于办公自动化,功能是很强的, 包括:PPT自动生成、PPT转长图、PPT带语音播放、Word自动生成、Excel数据处理、图片处理、视频处理、office文档转为PDF、PDF加解密、加水印等等,都是实用的干货。
使用方法极简,大多数功能只需一行、两行代码。
请在命令行,通过PIP安装:
pip install jojo-office
office库的安装名称是 jojo-office
使用时: import office 即可。
import office
office库依赖库包括:python-docx, openpyxl, python-pptx, PyPDF4, reportlab, playsound等, 安装时将自动安装完成。
如需要导入导出DataFrame, 则依赖 pandas 库,请按需要安装
pip install pandas -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
office库只支持新版的office文件(扩展名为 .docx, .xlsx, .pptx),不支持office2003以前的老版本office文件(扩展名为 .doc, .xls, .ppt)。
- import office
-
-
- # 以 试卷模板.docx为模板,生成output.docx, 填入datafile.xlsx文件数据,保存
- office.open_file("output.docx", "试卷模板.docx").fill("datafile.xlsx").save()
生成了一张试卷 output.docx 文件, 如下:
一张漂亮的考试卷就产生了, 有单选题、多选题、简答题、编程题等等
自动生成Word文件的方法是:首先写一个模板Word文件,复制模板创建新文件,再填入数据。
填入不同的数据,则产生不同的文件内容。
例如:模板Word文件 template.docx 的文字内容如下:
- 姓名 : {name}
- 年龄 : {age}
大括号 { } 中包含的叫变量, 上例中的:name, age。
在填入数据时,变量将替换为相应的值。
Excel文件 datafile.xlsx 中,Sheet1工作表B2单元格内容是 'Peter', C2格内容是 18。
则,模板Word文件 template1.docx 写成这样:
- 姓名 : {Sheet1!B2}
- 年龄 : {Sheet1!C2}
python程序如下:
- import office
-
- # 以 template1.docx 为模板,创建 output.docx 文件
- wd = office.open_file("output.docx", template="template1.docx")
- # 从 datafile.xlsx 文件中取数据, 填入, 保存
- wd.fill('datafile.xlsx').save()
上述程序也可以连写为一行:
office.open_file("output.docx", template="template1.docx").fill('datafile.xlsx').save()
程序运行后,生成 output.docx 文件, 其内容如下:
- 姓名 : Peter
- 年龄 : 18
可见,Excel文件中的数据,替换了 Word文档中的变量,生成了Word文档内容。
写模版文件就是在适当的位置写入变量。变量以 { 号开头,} 号结尾。
指向Excel数据的变量名就是 工作表及单元格的引用地址, 如: {Sheet1!B2} 。
生成Word就是填入数据。同一模板生成不同的Word文件,更换数据即可。
填入数据时, Word 文字格式(包括字体、大小、位置、颜色)都没有变。
模板Word文件 template3.docx 写成这样:
- 姓名 : {name}
- 年龄 : {age}
即: 有两个变量 name, age
python程序如下:
- import office
-
- # 数据
- data = {'name': 'Peter', 'age': 18}
-
- # 以 template3.docx 为模板,创建 output.docx 文件
- wd = office.open_file("output.docx", template="template3.docx")
-
- # 填入数据data, 保存
- wd.fill(data).save()
上述程序也可以连写为一行:
office.open_file("output.docx", template="template3.docx").fill(data).save()
程序运行后,生成 output.docx 文件, 其内容如下:
- 姓名 : Peter
- 年龄 : 18
如果 dictionary 是多层级的,比如:
data = { 'friend': { 'name': 'Mary', 'age': 19} }
则模板写为:
- 姓名:{friend.name}
- 年龄:{friend.age}
如果数据分布在多个Excel文件或 dictionary 中,可以多次调用fill()填充数据,例如:
- wd = office.open("output.docx", "template.docx")
-
- # 先填充 1.xlsx Excel数据,再填充 dict1 数据
- wd.fill('1.xlsx').fill(dict1).save()
有时,我们需要重复写某些文字段落,比如:列出人员名单。
Excel文件 datafile.xlsx 的 Sheet1工作表B2:C4区域有一个表格。
模板Word文件 template2.docx 写成这样:
{@repeat 姓名 : {Sheet1!B2}, 年龄 : {Sheet1!C2} }
'{@repeat' 表明需要重复,重复部分为 '姓名 : {Sheet1!B2}, 年龄 : {Sheet1!C2}'。
注意最后有一个 } 符号,与 {@repeat 形成闭环。
重复次数由其中的变量决定。 从 Sheet1!B2 开始,每次向下读取一行 Sheet1!B3、Sheet1!B4 ... 直达空值为止。
python程序如下:
- import office
-
-
- wd = office.open_file("output.docx", template="template2.docx")
-
- # 从 datafile.xlsx 文件中取数据, 填入, 保存
- wd.fill('datafile.xlsx').save()
程序运行后,生成 output.docx 文件, 其内容如下:
- 姓名 : Peter, 年龄 : 18
- 姓名 : Sam, 年龄 : 19
- 姓名 : Mary, 年龄 : 2
因为Excel表格数据有三行,所以重复了3次。
python程序如下:
- # 打开 output.docx 文件, 另存为 output.pdf
- office.open_file("output.docx").save("output.pdf")
注: 存为PDF的功能需要本机安装有Microsoft Word或 WPS,(Windows环境)。
开大会,每个客户要打印一张纸的邀请函。
把客人姓名、称谓写入列表,写一个循环,生成一批word文件, 打印它们即可。
模板文件见邀请函模板.docx, 大致内容如下:
- 尊敬的{name}{title}:
- 您好!我们很荣幸地邀请您...
python代码如下:
- import office
-
- persons = [
- ["张三", "先生"],
- ["李四", "女士"],
- ["王五", "总经理"],
- ]
- filenames = []
- for person in persons:
- data = {'name': person[0], 'title': person[1]}
- filename = person[0] + ".docx"
- office.open_file(filename, "邀请函模板.docx").fill(data).save()
- filenames.append(filename)
-
- # 可以使用 print_files() 批量打印文件
- office.print_files(filenames)

程序运行后,生成了 3个Word文件。
一张考试卷, 有多道选择题、多道简答题等等。
将题目、选项等数据写在Excel文件 datafile.xlsx 的 '试卷'工作表中。
模板文件为 试卷模板.docx, 内容大致如下。
模板说明:
{日期} 是从 dict 数据中填入的。
其他数据均来自 Excel数据的 '试卷'工作表
'一' 这个部分的 重复段落 '{@repeat .... }' 中包括四行。
第一行是 {@index}序号、{试卷!A6}题目、{试卷!F6}答案。
{@index} 是一个特殊变量,表示重复的序号。
第二行是 {试卷!B6} 选项A 、 {试卷!C6} 选项B。
第三行是 {试卷!D6} 选项C 、 {试卷!E6} 选项D。
第四行是一个空行。表示每道题之间空一行。
'二' 这个部分类似... ...
python程序如下:
- import office
-
- wd = office.open_file("output.docx", "试卷模板.docx")
- wd.fill('datafile.xlsx') # 填入Excel数据
- wd.fill({'日期': '2022年'}) # 填入变量 '日期'
- wd.save()
程序运行后,生成 output.docx 文件, 其内容如下:
一张漂亮的考试卷就产生了, 有单选题、多选题、简答题、编程题等等。
Word模板文件只是定义了试卷的组成部分和格式、变量。
试卷的所有数据内容都是在Excel文件中定义。
以上方法是通用的, 可以生成任何试卷、或其他类型的文档。
1, office库提供了 Word生成功能。
2, 写一个模板Word文件,编写变量。填入数据,即可生成Word文件.
3, 数据可以放在Excel文件中。变量为 Excel的 {工作表!单元格}。
4, 数据可以是 dictionary。变量为 键名,如:{key}。
5,段落可以重复生成
6, Word可以存为PDF。
office库还有其他许多功能,下节课再讲。
office库还在开发完善中,偶有bug请见谅、或提改进。
有兴趣深入研究的,可以看office.py的源码。
作者:我好看吗
链接:https://www.pythonheidong.com/blog/article/1870581/f32aa23d4902b254051f/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!