伴随着凯多被打败,草帽海贼团即将迎来新的挑战,现急需扩展队伍(其实就是山治想把大和叫上),为了方便后面邀请新的小伙伴也可以快速制作出邀请函,船上的神秘人悄悄地的写了一个Python自动化脚本来实现了这一个功能,并帮助山治生成好了给大和的邀请函。效果如下:
我习惯使用conda来创建虚拟环境,搭建可以根据自己的喜好创建即可。
在项目的根目录下创建一个名叫Word的文件夹,用来保存我们用来操作Word的脚本。
并通过一下命令安装python-docx
库
pip install python-docx
如果速度比较慢可以使用腾讯源来进行安装
pip install python-docx -i https://mirrors.cloud.tencent.com/pypi/simple
完整代码文章后面会有,我先讲解一下具体内容
file = docx.Document()
先创建好一个docx的文档对象。
my_style = file.styles.add_style('my_style', WD_STYLE_TYPE.PARAGRAPH)
my_style.base_style = file.styles['Normal']
my_style.font.name = '华文行楷'
my_style.element.rPr.rFonts.set(qn('w:eastAsia'), '华文行楷')
my_style.font.size = Pt(22)
my_style.font.underline = False
my_style.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
my_style.paragraph_format.space_before = Pt(20)
my_style.paragraph_format.space_after = Pt(20)
my_style.paragraph_format.line_spacing = 1
my_style.paragraph_format.first_line_indent = Pt(44)
设置一下word文档的基本样式,比如字体,我们将中文还有英文都设置成华文行楷
,具体字体大家自己根据情况设置即可。
段前距,段后距我们都设置的是20pt,并且是两端对齐。行间距设置为单倍行间距。
以上就是段落的基本设置,接下来我们设置一下字符的样式。
word_style = file.styles.add_style('word_style', WD_STYLE_TYPE.CHARACTER)
word_style.font.name = '华文行楷'
word_style.element.rPr.rFonts.set(qn('w:eastAsia'), '华文行楷')
word_style.font.color.rgb = RGBColor(79, 129, 189)
word_style.font.underline = True
同样是设置了字体,并设置了字体颜色和下划线。
完成基本设置后,我们开始创建正文。
p = file.add_picture('bg.jpg', width=Cm(15))
file.paragraphs[-1].alignment = WD_ALIGN_PARAGRAPH.CENTER
我们先在文中插入一个图片宽度设为15厘米高度自适应,并让其居中对齐。
接下来我们添加邀请函的标题
p = file.add_paragraph()
p.garagraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
p.paragraph_format.space_after = Pt(20)
r = p.add_run('邀请你加入草帽一伙')
r.font.name = '华文行楷'
r.element.rPr.rFonts.set(qn('w:eastAsia'), '华文行楷')
r.font.size = Pt(48)
我们先新插入一个段落,并设为居中对齐,设置好标题内容以及字体和文字大小。
添加邀请行的称呼相关的内容
p = file.add_paragraph(style="my_style")
p.garagraph_format.first_line_indent = Pt(0)
p.add_run("亲爱的")
p.add_run("#受邀人#", style="word_style")
p.add_run("小伙伴:")
这里设置了邀请函的本文第一行相关的内容,沿用了基础的设置,但是通常我们第一行不需要缩减,一次这里额外设置缩减为0
#受邀人#之所以要用井号包围,是为了我们后面通过另外一个脚本来动态的设置这部分数据。
接下来我们设置正文部分
p =file.add_paragraph(style="my_style")
p.add_run("#主办方#", style="word_style")
p.add_run("邀请您加入草帽海贼团,成为一个伟大的海贼,干掉天龙人。")
p =file.add_paragraph(style="my_style")
p.add_run("时间:随时")
p =file.add_paragraph(style="my_style")
p.add_run("地点:")
p.add_run("#地点#", style="word_style")
p = file.add_paragraph(style="my_style")
p.add_run("邀请人:草帽一伙")
file.save('草帽海贼团邀请函.docx')
这里基本和上面一样没有什么额外的知识点,除了最后一个保存文件。
目前代码的目录如下,是没有没哟word文件的。
我们运行看看效果
可以看到生成好了模版,打开后如下所示
背景图片来着互联网,如有侵权请留言给我。
我们看到模版已经生成好了,但是目前里面有些信息是缺失的。我们来通过一个脚本自动更新一下。
import docx
data = {
"#受邀人#": "大和",
"#主办方#": "山治",
"#地点#": "桑尼号"
}
file = docx.Document("草帽海贼团邀请函.docx")
for k, v in data.items():
for p in file.paragraphs:
for r in p.runs:
if k in r.text:
r.text = r.text.replace(k, v)
file.save(f"草帽海贼团邀请函-{data['#受邀人#']}.docx")
代码很简单,就是先遍历字典,在变量word的内容,然后进行匹配如果包含我们的预设字段,就自动更新为字典的值。
我们看一下效果。
此时的目录结构为
整理后的脚本
demo.py
import docx
from docx.oxml.ns import qn
from docx.shared import Pt, Cm, RGBColor
from docx.enum.style import WD_STYLE_TYPE
from docx.enum.text import WD_ALIGN_PARAGRAPH
file = docx.Document()
my_style = file.styles.add_style('my_style', WD_STYLE_TYPE.PARAGRAPH)
my_style.base_style = file.styles['Normal']
my_style.font.name = 'Arial'
my_style.element.rPr.rFonts.set(qn('w:eastAsia'), 'Arial')
my_style.font.size = Pt(22)
my_style.font.underline = False
my_style.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
my_style.paragraph_format.space_before = Pt(20)
my_style.paragraph_format.space_after = Pt(20)
my_style.paragraph_format.line_spacing = 1
my_style.paragraph_format.first_line_indent = Pt(44)
word_style = file.styles.add_style('word_style', WD_STYLE_TYPE.CHARACTER)
word_style.font.name = '华文行楷'
word_style.element.rPr.rFonts.set(qn('w:eastAsia'), '华文行楷')
word_style.font.color.rgb = RGBColor(79, 129, 189)
word_style.font.underline = True
p = file.add_picture('bg.jpg', width=Cm(15))
file.paragraphs[-1].alignment = WD_ALIGN_PARAGRAPH.CENTER
p = file.add_paragraph()
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
p.paragraph_format.space_after = Pt(20)
r = p.add_run('邀请你加入草帽一伙')
r.font.name = '华文行楷'
r.element.rPr.rFonts.set(qn('w:eastAsia'), '华文行楷')
r.font.size = Pt(48)
p = file.add_paragraph(style="my_style")
p.paragraph_format.first_line_indent = Pt(0)
p.add_run("亲爱的")
p.add_run("#受邀人#", style="word_style")
p.add_run("小伙伴:")
p =file.add_paragraph(style="my_style")
p.add_run("#主办方#", style="word_style")
p.add_run("邀请您加入草帽海贼团,成为一个伟大的海贼,干掉天龙人。")
p =file.add_paragraph(style="my_style")
p.add_run("时间:随时")
p =file.add_paragraph(style="my_style")
p.add_run("地点:")
p.add_run("#地点#", style="word_style")
p = file.add_paragraph(style="my_style")
p.add_run("邀请人:草帽一伙")
file.save('草帽海贼团邀请函.docx')
auto_write.py
import docx
data = {
"#受邀人#": "大和",
"#主办方#": "山治",
"#地点#": "桑尼号"
}
file = docx.Document("草帽海贼团邀请函.docx")
for k, v in data.items():
for p in file.paragraphs:
for r in p.runs:
if k in r.text:
r.text = r.text.replace(k, v)
file.save(f"草帽海贼团邀请函-{data['#受邀人#']}.docx")
今天简单带大家用了这个库实现了一个生成邀请函的功能,具体这个库的用法我们后面慢慢和大家细说。你是不是已经跃跃欲试了呢?赶快动手实践吧。
我是Tango,一个热爱分享技术的程序猿我们下期见。
我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。