目录
安装:pip install python-docx
1、docx中设置尺寸width或height时,需要使用 Inches,Cm 【英寸、厘米】等才能生效,更多见docx.shared脚本库
2、对齐方式:alignment,需要from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
3、Word 中一般可以结构化成三个部分:文档 Document、段落 Paragraph、文字块 Run
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT, WD_ALIGN_PARAGRAPH, WD_COLOR_INDEX, WD_COLOR
from docx.shared import Inches, Cm, Pt, RGBColor
# 创建文件对象:有参数时打开,没有参数时为新建
docx_file = Document()
标题
添加标题.add_heading,参数为标题名称和级别,级别为0-9,默认为1,0级别标题下自带下划线。
docx_file.add_heading(text='0级标题', level=0)
docx_file.add_heading(text='一级标题', level=1)
docx_file.add_heading(text='二级标题', level=2)
docx_file.add_heading(text='三级标题', level=3)
段落
新增段落(插入段落)
for i in range(1, 5):
docx_file.add_paragraph(fr'这是第{i}段')
par_last = docx_file.add_paragraph('最后一段')
par_last.insert_paragraph_before('这是在当前段落对象前插入一段内容') # 在par_last前插入一段
追加内容
追加内容适合所有段落类型的操作
## 对指定段落操作,使用索引标获取段落对象进行操作,每个标题、图片等内容都可成为一个段落对象
print(len(docx_file.paragraphs)) # 获取段落数
par_last3 = docx_file.paragraphs[-3]
par_last3.insert_paragraph_before('倒数第三段前插入一行内容')
### 段落追加内容
par_last3.add_run('这是给倒数第三段追加的内容!!')
段落样式
设置文档字体样式,修改段落的add_run()对象的属性来设置样式。暂时无法单独设置中文字体样式 (name属性只对西文起作用)
par_style = docx_file.add_paragraph()
t1 = par_style.add_run()
t1.text = '忽焉纵体,以遨以嬉。\n左倚采旄,右荫桂旗。\n攘皓腕于神浒兮,采湍濑之玄芝。\n余情悦其淑美兮,心振荡而不怡。\n无良媒以接欢兮,托微波而通辞。\n愿诚素之先达兮,解玉佩以要之。'
t1.italic = True # 设置斜体,同t1.font.italic = True
t1.bold = True # 设置粗体,t1.font.bold = True
t1.underline = True # 是否加下划线,同t1.font.underline = True
t1.font.size = Pt(15) # 字体大小
t1.font.color.rgb = RGBColor(210, 100, 50) # 字体颜色设置
t1.font.highlight_color = WD_COLOR_INDEX.BRIGHT_GREEN # 设置背景色(WD_COLOR_INDEX 或 WD_COLOR)
中文字体与全局样式设置
t1.font.name = 'MS PGothic' # 设置西文字体
docx_file.styles['Normal'].font.name = u'楷体'
docx_file.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'),u'楷体') # 设置全局中文字体
t1.element.rPr.rFonts.set(qn('w:eastAsia'),u'楷体')
par_style.style.font.size = Pt(5)
par_style.style.font.italic = True
par_style.style.font.bold = True
图片
添加图片.add_picture,之前介绍过PPT的操作,同PPT一样,图片等对象不能单独做对齐方式等样式的修改,只能修改段落对齐方式,处理方法有两种:
1、直接添加的图片对象也是一个段落对象,可先添加图片后再获取图片所在段落进行修改img_path = r'C:\Users\Administrator\Desktop\testfile\测试图片\8.png' docx_file.add_picture(image_path_or_stream=img_path, width=Cm(8)) # 参数:图片位置\宽度\高度。图片默认左边距对齐 op = docx_file.paragraphs[-1] op.alignment = WD_ALIGN_PARAGRAPH.RIGHT
2、先添加段落然后给段落追加图片,可通过添加段落后将图片追加给段落然后对段落做对齐样式的设置(先创建段落后,给段落对象追加图片可设置对齐方式)
par_img = docx_file.add_paragraph() pimg = par_img.add_run() pimg.add_picture(image_path_or_stream=img_path, width=Cm(8)) par_img.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
新增页
新增页:add_page_break()增加分页符会使两页隶属同一个节,使得对节的属性调整会应用到两页上,因此若一直使用add_page_break()增加页数的话,会使所增加的页面都属于同一个节,都共用同一个页面属性。
1、新增页.add_page_break():增加一个分页符,表现为增加一页,但所增加的页和前一页属于同一个“节”。
for i in range(1, 3):
s = docx_file.add_page_break()
docx_file.add_heading(text=f'这是新的一页{i}', level=0)
2、新增页.add_section():增加一个“节”,表现为增加一页。添加的节的属性默认会沿袭上一个节的属性,因此添加的节的页边距等属性与上一个节相同(段落等不会相同)
for i in range(1, 3):
docx_file.add_section()
docx_file.add_heading(text=f'这是新的一页{i}', level=1)