!文章内容如有错误或排版问题,请提交反馈,非常感谢!
python-docx是用于创建可修改微软Word(.docx)的一个Python库。个人觉得平时使用的场景不多,最近在学习自动化办公看到的内容,仅做一些简单的梳理。
python-docx的文档拆解
python-docx将整个文档看做是一个Document对象,其基本结构如下:
- 每个Document包含许多个代表”段落”的Paragraph对象,存放在paragraphs中。
- 每个Paragraph都有许多个代表”行内元素”的Run对象,存放在runs中。
在python-docx中,run是最基本的单位,每个run对象内的文本样式都是一致的,也就是说,在从docx文件生成文档对象时,python-docx会根据样式的变化来将文本切分为一个个的Run对象。
python-docx将文章中所有的表格都存放在document.tables中,每个Table都有对应的行table.rows、列table.columns和单元格(table.cell()),单元格是最基本的单位,每个单元格又被划分成不同的Paragraph对象,具体内容同上。
python-docx的基本操作
from docx import Document from docx.enum.text import WD_BREAK from docx.shared import Cm from docx.oxml.ns import qn document = Document('测试文档.docx') for p in document.paragraphs: print(p.text) document.add_paragraph('这是新的段落内容') # 添加标题 # 默认情况下添加的标题是最高一级的,即一级标题,通过参数level设定,范围是1~9 document.add_heading('我是一级标题') document.add_heading('我是二级标题', level=2) # 添加换页 # 如果一个段落不满一页,需要分页时,可以插入一个分页符,直接调用会将分页符插入到最后一个段落之后: document.add_page_break() paragraph = document.add_paragraph("独占一页") # 添加一个段落 paragraph.runs[-1].add_break(WD_BREAK.PAGE) # 在段落的最后一个节段后添加分页 # 表格操作 table = document.add_table(rows=2, cols=2) cell = table.cell(0, 1) # 获取第一行第二列单元格 cell.text = '我是单元格文字' # 设置单元格文本 row = table.rows[1] # 表格的行 row.cells[0].text = 'Foobar to you.' row.cells[1].text = 'And a hearty foobar to you too sir!' row = table.add_row() # 增加行 # 添加表格(复杂) items = ((7, '1024', '手机'), (3, '2042', '笔记本'), (1, '1288', '台式机'),) table = document.add_table(1, 3) heading_cells = table.rows[0].cells heading_cells[0].text = '数量' heading_cells[1].text = '编码' heading_cells[2].text = '描述' for item in items: cells = table.add_row().cells cells[0].text = str(item[0]) cells[1].text = item[1] cells[2].text = item[2] # 添加图片 document.add_picture('docx.png', width=Cm(10)) # 样式 # 样式可以针对整体文档(document)、段落(paragraph)、节段(run),越具体,样式优先级越高 # 段落样式 # 段落样式包括:对齐、列表样式、行间距、缩进、背景色等,可以在添加段落时设定,也可以在添加之后设置: document.add_paragraph('Header', style='Header') # 文字样式 # 设置加粗/斜体 paragraph = document.add_paragraph('添加一个段落') run = paragraph.add_run('添加一个节段') run.bold = True run = paragraph.add_run('我是斜体的') run.italic = True # 设置字体 paragraph = document.add_paragraph('我的字体是宋体') run = paragraph.runs[0] run.font.name = '宋体' run._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑') # 设置完这个才生效
参考链接: