前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用Python生成Word邀请函

利用Python生成Word邀请函

原创
作者头像
IT蜗壳-Tango
修改2024-01-22 13:53:31
24300
代码可运行
修改2024-01-22 13:53:31
举报
运行总次数:0
代码可运行

背景

伴随着凯多被打败,草帽海贼团即将迎来新的挑战,现急需扩展队伍(其实就是山治想把大和叫上),为了方便后面邀请新的小伙伴也可以快速制作出邀请函,船上的神秘人悄悄地的写了一个Python自动化脚本来实现了这一个功能,并帮助山治生成好了给大和的邀请函。效果如下:

请交个大和
请交个大和

创建Python工程

我习惯使用conda来创建虚拟环境,搭建可以根据自己的喜好创建即可。

在项目的根目录下创建一个名叫Word的文件夹,用来保存我们用来操作Word的脚本。

并通过一下命令安装python-docx

代码语言:bash
复制
pip install python-docx

如果速度比较慢可以使用腾讯源来进行安装

代码语言:bash
复制
pip install python-docx -i https://mirrors.cloud.tencent.com/pypi/simple

开始正式编码

完整代码文章后面会有,我先讲解一下具体内容

代码语言:python
代码运行次数:0
复制
file = docx.Document()

先创建好一个docx的文档对象。

代码语言:python
代码运行次数:0
复制
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,并且是两端对齐。行间距设置为单倍行间距。

以上就是段落的基本设置,接下来我们设置一下字符的样式。

代码语言:python
代码运行次数:0
复制
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

同样是设置了字体,并设置了字体颜色和下划线。

完成基本设置后,我们开始创建正文。

代码语言:pyton
复制
p = file.add_picture('bg.jpg', width=Cm(15))
file.paragraphs[-1].alignment = WD_ALIGN_PARAGRAPH.CENTER

我们先在文中插入一个图片宽度设为15厘米高度自适应,并让其居中对齐。

接下来我们添加邀请函的标题

代码语言:python
代码运行次数:0
复制
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)

我们先新插入一个段落,并设为居中对齐,设置好标题内容以及字体和文字大小。

添加邀请行的称呼相关的内容

代码语言:python
代码运行次数:0
复制
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

#受邀人#之所以要用井号包围,是为了我们后面通过另外一个脚本来动态的设置这部分数据。

接下来我们设置正文部分

代码语言:python
代码运行次数: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文件的。

我们运行看看效果

可以看到生成好了模版,打开后如下所示

背景图片来着互联网,如有侵权请留言给我。

自动填充内容

我们看到模版已经生成好了,但是目前里面有些信息是缺失的。我们来通过一个脚本自动更新一下。

代码语言:python
代码运行次数:0
复制
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

代码语言:python
代码运行次数:0
复制
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

代码语言:python
代码运行次数:0
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 创建Python工程
  • 开始正式编码
  • 自动填充内容
  • 结尾
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档