目录
Word设置文字样式
Word设置段落样式
Word生成通知书
Word读取内容
Word设置文字样式
常用方法与属性
函数名&属性 | 含义 |
docx.shared.Inches() | 创建大小(英寸) |
docx.shared.Pt() | 创建大小(像素) |
docx.shared.RGBColor() | 创建颜色 |
docx.text.run.Run.font.bold | 文字加粗 |
docx.text.run.Run.font.italic | 文字斜体 |
docx.text.run.Run.font.strike | 文字删除线 |
docx.text.run.Run.font.shadow | 文字阴影 |
docx.text.run.Run.font.size | 文字大小 |
docx.text.run.Run.font.color.rgb | 文字颜色 |
docx.text.run.Run._element.rPr.rFonts.set(qn('w:eastAsia'), '字体') | 文字字体 |
注意
我们在写word的时候,一般英文采用Arial和新罗马字体,中文是宋体和黑体
w:eastAsia是东亚的意思。应该是规定使用中文字体时确认“微软雅黑”是哪个地方的微软雅黑记住即可
代码
def use_style():from docx import Documentfrom docx.shared import Pt,Inches,RGBColor# 创建文档doc1 = Document()# 设置加粗p1 = doc1.add_paragraph('这是段落1:\n')p1.runs[0].font.bold=True# 加粗p1.add_run('这是内容1.1_加粗\n').font.bold=True# 斜体p1.add_run('这是内容1.2_斜体\n').font.italic = True# 删除线p1.add_run('这是内容1.3_删除线\n').font.strike = True# 阴影p1.add_run('这是内容1.4_阴影\n').font.shadow = True# 字体大小p1.add_run('这是内容1.5_字体大小\n').font.size = Pt(30)# 颜色 rgb三原色 0-255p1.add_run('这是内容1.6_颜色\n').font.color.rgb = RGBColor(255,100,76)# 字体# p1.add_run('这是内容1.7_字体\n').font.name='微软雅黑' # 只写这个设置不成功的run = p1.add_run('这是内容1.7_字体\n')from docx.oxml.ns import qn'''AttributeError: 'NoneType' object has no attribute 'rFonts'直接设置字体,会报错,需要先声明字体名称'''run.font.name=''run._element.rPr.rFonts.set(qn('w:eastAsia'),'微软雅黑')doc1.save('./create_data/05_设置字体样式.docx')if __name__ == "__main__":use_style()
Word设置段落样式
常用方法与属性
函数名&属性 | 含义 |
paragraph.paragraph_format.alignment | 段落内容位置 |
paragraph.paragraph_format.space_before | 段落前距离 |
paragraph.paragraph_format.space_after | 段落后距离 |
paragraph.paragraph_format.left_indent | 段落左边距离 |
paragraph.paragraph_format.first_line_indent | 段落首行左边距离 |
paragraph.paragraph_format.line_spacing | 段落间行间距代码 |
代码
def use_style():from docx import Documentfrom docx.enum.text import WD_ALIGN_PARAGRAPHfrom docx.shared import Pt# 创建文档doc1 = Document()# 段落居中doc1.add_paragraph('这是段落1:').paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER# 设置整段离左侧距离doc1.add_paragraph('Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是...').paragraph_format.left_indent =Pt(50)# 设置首行左侧距离doc1.add_paragraph('Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是...').paragraph_format.first_line_indent = Pt(50)# 段落离上面的距离doc1.add_paragraph('这是段落2:').paragraph_format.space_before=Pt(30)# 段落离下面的距离doc1.add_paragraph('这是段落3:').paragraph_format.space_after=Pt(30)# 设置行间距doc1.add_paragraph('这是段落4:')doc1.add_paragraph('Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是...').paragraph_format.line_spacing = Pt(50)doc1.save('./create_data/06_设置段落样式.docx')if __name__ =='__main__':use_style()
Word生成通知书
代码
from docx import Document
from docx.shared import Pt,RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENTfrom docx.oxml.ns import qn
def create_book():# 生成一个文档doc1 = Document()# 增加标题title = doc1.add_paragraph()run = title.add_run('录取通知书')# 设置标题的样式run.font.size = Pt(30)run.font.color.rgb = RGBColor(255,0,0)run.font.name = ''run._element.rPr.rFonts.set(qn('w:eastAsia'),'黑体')title.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER# 增加内容doc1.add_paragraph('张三 同学:')content1 = doc1.add_paragraph('兹录取你入我校 人工智能技术 专业类学习。请凭本通知书来报道。具体时间、地点见《新生入学须知》。')# 设置内容样式content1.paragraph_format.first_line_indent = Pt(30)# 落款footer = doc1.add_paragraph('清华大学\n')footer.add_run('二0三0年八月十号')footer.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT# 保存文档doc1.save('./create_data/07_录取通知书.docx')def create_book2(name,major,school,_time):# 生成一个文档doc1 = Document()# 增加标题title = doc1.add_paragraph()run = title.add_run('录取通知书')# 设置标题的样式run.font.size = Pt(30)run.font.color.rgb = RGBColor(255,0,0)run.font.name = ''run._element.rPr.rFonts.set(qn('w:eastAsia'),'黑体')title.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER# 增加内容doc1.add_paragraph(f'__{name}__ 同学:')content1 = doc1.add_paragraph(f'兹录取你入我校 __{major}__ 专业类学习。请凭本通知书来报道。具体时间、地点见《新生入学须知》。')# 设置内容样式content1.paragraph_format.first_line_indent = Pt(30)# 落款footer = doc1.add_paragraph(f'{school}\n')footer.add_run(f'{_time}')footer.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT# 保存文档doc1.save(f'./create_data/07_录取通知书_{name}.docx')if __name__ == '__main__':# create_book()create_book2('吕布','人工智能技术','清华大学','二0三0年八月十号')
Word读取内容
常用方法与属性
函数名&属性 | 含义 |
doc.paragraphs | 获取段落 |
doc.tables | 获取表格 |
paragraph.text | 获取段落内容 |
table.rows | 获取行对象 |
row.cells | 获取表格对象 |
cell.text | 获取表格数据 |
代码
from docx import Document
def read_word():# 打开文档doc1 = Document('./base_data/原数据.docx')# 读取数据-段落for p in doc1.paragraphs:print(p.text)# 读取表格for t in doc1.tables:for row in t.rows:for c in row.cells:print(c.text,end=' ')print()if __name__ == '__main__':read_word()
Word通过模板生成文档
代码
from docx import Document
def create_word(_data):# 打开文档doc1 = Document('./base_data/word_模板.docx')# 读取里面的数据for p in doc1.paragraphs:# 替换新数据 如果直接级paragraph的text替换内容,会丢失样式# p.text = p.text.replace('{0}','000001')# p.text = p.text.replace('{1}','2030')# p.text = p.text.replace('{2}','01')# p.text = p.text.replace('{3}','01')# p.text = p.text.replace('{4}','01')# p.text = p.text.replace('{5}','01')# p.text = p.text.replace('{6}','闯红灯')# p.text =p.text.replace('{7}','600')for run in p.runs:run.text = run.text.replace('{0}',_data[0])run.text = run.text.replace('{1}',_data[1])run.text = run.text.replace('{2}',_data[2])run.text = run.text.replace('{3}',_data[3])run.text = run.text.replace('{4}',_data[4])run.text = run.text.replace('{5}',_data[5])run.text = run.text.replace('{6}',_data[6])run.text = run.text.replace('{7}',_data[7])# 保存新文件doc1.save(f'./create_data/09_模板生成文档_{_data[0]}.docx')
if __name__ == '__main__':data = [('00001','2030','01','01','01','01','闯红灯','600'),('00002','2030','02','01','01','01','违反禁令','300'),('00003','2030','03','01','01','01','违章停车','300'),('00004','2030','04','01','01','01','挑线','100'), ('00005','2030','05','01','01','01','没礼让行人','300'),]for d in data:create_word(d)# print(d)