对文字字体样式进行修改
run.font.样式 = xxx
import os
os.chdir('D:\\python_major\\auto_office15')
from docx import Document
from docx.shared import Pt, RGBColor
from docx.oxml.ns import qn
doc = Document('这是一个文档.docx')
for paragraph in doc.paragraphs:
for run in paragraph.runs:
run.font.bold = True
run.font.italic = True
run.font.underline = True
run.font.strike = True
run.font.shadow = True
run.font.size = Pt(20)
run.font.color.rgb = RGBColor(255,255,0)
run.font.name = '微软雅黑'
r = run._element.rPr.rFonts
r.set(qn('w:eastAsia'),'微软雅黑')
#如果是中文的话,这样设定字体
doc.save('这是一个程序创建的文档.docx')
–> 输出结果为:注意这里的对齐方式是和原文档的格式一样,原文档如果是左对齐那么生成的文档也是左对齐
段落样式的修改
对齐样式
paragraph.alignment = 对齐方式
可选的对齐方式有:LEFT、CENTER、RIGHT、JUSTIFY、DISTRIBUTE、JUSTIFY_MED、JUSTIFY_HI、JUSTIFY_LOW、THAI_JUSTIFY
from docx.enum.text import WD_ALIGN_PARAGRAPH
paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
行间距的调整
line_spacing = xx
注意使用浮点数,比如2.0就是表示两倍行间距
paragraph.paragraph_format.line_spacing = 2.0
段前与段后间距
space_before/space_after = Pt(xx)
Pt(12) 表示12磅
paragraph.paragraph_format.space_before = Pt(12)
paragraph.paragraph_format.space_after = Pt(12)
综合应用
编写一个程序,要求
(1)读取会议模板.txt文件
(2)根据其中的内容生成一个格式化后的文档
(3)第一行为标题,要求居中且字体字号为18,加粗,微软雅黑
(4)罗马数字开头的行如I.、ll.等,要求字体字号为14,加粗,微软雅黑
(5)其它内容要求字体字号为12,微软雅黑
(6)可自行设计更丰富的样式
(7)将文件保存为会议模板.docx
提示: 文本数据内容如下
参考代码
步骤一、前期准备
import os
os.chdir('D:\\python_major\\auto_office15')
import datetime
from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.shared import Pt, RGBColor
from docx.oxml.ns import qn
doc = Document()
该部分代码完成的功能是:设置程序运行路径、导入相关的库和创建一个doc实例
步骤二、将txt文本数据处理后提取到列表
ls = []
with open("会议模板.txt","r",encoding = "utf-8") as f:
for line in f.readlines():
line = line.strip()
ls.append(line)
print(ls)
–> 输出结果为:
[‘会议议程’, ‘与会者: 姓名’, ‘I.\t宣布开会’, ‘主持人姓名于日期时间在地点宣布召开组织/会员会名称的例会。’, ‘II.\t点名’, ‘干事姓名进行了点名。与会人员如下:与会者姓名’, ‘III.\t批准上次会议的纪要’, ‘干事姓名宣读了上次会议的纪要。在宣读时批准了纪要。’, ‘IV.\t未决问题’, ‘a)\t未决问题/讨论总结’, ‘b)\t未决问题/讨论总结’, ‘c)\t未决问题/讨论总结’, ‘V.\t新业务’, ‘a)\t新业务/讨论总结’, ‘b)\t新业务/讨论总结’, ‘c)\t新业务/讨论总结’, ‘VI.\t休会’, ‘主持人姓名在时间宣布休会。’, ‘纪要提交者:姓名’, ‘纪要审批者:’]
步骤三、设置标题样式
当然这一步也可以直接在合并在步骤四种,最终的代码进行合并了
paragraph_1 = doc.add_heading(ls[0],level = 1)
paragraph_1.alignment = WD_ALIGN_PARAGRAPH.CENTER
for run in paragraph_1.runs:
#print(run.text)
run.font.size = Pt(18)
run.font.color.rgb = RGBColor(0,0,0)
run.font.bold = True
run.font.name = '微软雅黑'
r = run._element.rPr.rFonts
r.set(qn('w:eastAsia'),'微软雅黑')
步骤四、设置段落样式并保存文件
罗马字符的标识在所给的数据里面有个很明显的标识就是都有 ‘.’,这也就成为了区分目标行和普通行的区别
for item in ls[1:]:
if '.' in item:
paragraph = doc.add_paragraph(item)
for run in paragraph.runs:
run.font.size = Pt(14)
run.font.bold = True
run.font.name = '微软雅黑'
r = run._element.rPr.rFonts
r.set(qn('w:eastAsia'),'微软雅黑')
else:
paragraph = doc.add_paragraph(item)
for run in paragraph.runs:
run.font.size = Pt(12)
run.font.name = '微软雅黑'
r = run._element.rPr.rFonts
r.set(qn('w:eastAsia'),'微软雅黑')
doc.save("会议模板.docx"
print("模板文件已经生成\n\n文件位置在:{}\n\n文件名称为:会议模板.docx".format(os.getcwd()))
–> 输出结果为:
全部代码及输出结果
这里将步骤三和步骤四合并
import os
os.chdir('D:\\python_major\\auto_office15')
import datetime
from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.shared import Pt, RGBColor
from docx.oxml.ns import qn
doc = Document()
ls = []
with open("会议模板.txt","r",encoding = "utf-8") as f:
for line in f.readlines():
line = line.strip()#去除换行符
ls.append(line)
print(ls)
for item in ls:
if item == '会议议程':
paragraph_1 = doc.add_heading(ls[0],level = 1)
paragraph_1.alignment = WD_ALIGN_PARAGRAPH.CENTER
for run in paragraph_1.runs:
run.font.size = Pt(18)
run.font.color.rgb = RGBColor(0,0,0)
run.font.bold = True
run.font.name = '微软雅黑'
r = run._element.rPr.rFonts
r.set(qn('w:eastAsia'),'微软雅黑')
elif '.' in item:
paragraph = doc.add_paragraph(item)
for run in paragraph.runs:
run.font.size = Pt(14)
run.font.bold = True
run.font.name = '微软雅黑'
r = run._element.rPr.rFonts
r.set(qn('w:eastAsia'),'微软雅黑')
else:
paragraph = doc.add_paragraph(item)
for run in paragraph.runs:
run.font.size = Pt(12)
run.font.name = '微软雅黑'
r = run._element.rPr.rFonts
r.set(qn('w:eastAsia'),'微软雅黑')
doc.save("会议模板.docx")
print("模板文件已经生成\n\n文件位置在:{}\n\n文件名称为:会议模板.docx".format(os.getcwd()))
–> 输出结果为: