python-docx神器操作word文档
1 安装
pip 来安装:
$ pip install python-docx
2 简单使用
from docx import Document
# 创建word文档
document = Document()
# 添加段落
paragraph = document.add_paragraph('Lorem ipsum dolor sit amet.')
# 插入段落
prior_paragraph = paragraph.insert_paragraph_before('Lorem ipsum')
# 保存文件
document.save(r"D:\test.docx")
3 python-docx入门
3.1 添加标题
默认情况下添加的标题是最高一级的,即一级标题,通过参数 level
设定,范围是 1 ~ 9(也有 0 级别,表示的是段落标题)
- Document
- add_heading
from docx import Document
# 创建word文档
document = Document()
# 添加一级标题
document.add_heading('我是一级标题')
# 添加二级标题
document.add_heading('我是二级标题', level=2)
# 添加段落标题
document.add_heading('我是段落标题', level=0)
# 保存文件
document.save('./test.docx')
3.2 添加段落
如何在word文档中添加段落呢?
- Document
- add_paragraph
- insert_paragraph_before
- add_paragraph
from docx import Document
# 创建word文档
document = Document()
# 添加段落
document.add_paragraph('添加一处段落')
# 添加段落
p0 = document.add_paragraph('再次添加一处段落')
# 在 p0段落之前 再次添加段落
p0.insert_paragraph_before("在 p0 段落之前 添加段落")
# 保存
document.save('./test1.docx')
3.3 添加换页
如果一个段落不满一页,需要分页时,可以插入一个分页符,直接调用会将分页符插入到最后一个段落之后
- Document
- add_page_break: 直接添加一页
- 通过段落添加一页
p1 = document.add_paragraph("独占一页")
p1.runs[-1].add_break(WD_BREAK.PAGE)
from docx import Document
from docx.enum.text import WD_BREAK
# 创建word文档
document = Document()
# 在当前文档最后添加一页
document.add_page_break()
# 添加段落
p1 = document.add_paragraph("独占一页")
# 插入段落
p1.insert_paragraph_before("insert_paragraph_before")
# 在 p1段落后 添加一页
p1.runs[-1].add_break(WD_BREAK.PAGE)
3.4 表格操作
Word 文档中经常会用到表格,python-docx 如何添加和操作表格呢?
- Document
- add_table
- cell 单元格 参数有两个,实例:cell(0, 1) 获取第1行第2列的单元格
- rows 获取
- cells
- add_table
from docx import Document
# 创建word文档
document = Document()
# 添加一个 2×2 表格
table = document.add_table(rows=2, cols=2)
# 获取第一行第二列单元格
cell = table.cell(0, 1)
# 设置单元格文本
cell.text = '我是第 1 行 第 2 列单元格'
# 表格的行
row = table.rows[1]
row.cells[0].text = '我是第 2 行 第 1 列单元格'
row.cells[1].text = '我是第 2 行 第 2 列单元格'
# 增加行
row = table.add_row()
案例:
# 表格数据
items = (
(7, '1024', '手机'),
(3, '2042', '笔记本'),
(1, '1288', '台式机'),
)
# 添加一个表格
table = document.add_table(rows=1, cols=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]
3.5 添加图片
如何插入图片到word文档之中呢?
- Document
- add_picture
# -*- coding: utf-8 -*-
from docx import Document
from docx.shared import Cm
# 创建word文档
document = Document()
# 插入图片 原始尺寸
document.add_picture('./01.jpg')
# 插入图片 Cm 厘米
document.add_picture('./01.jpg', width=Cm(15))
# 保存
document.save('./test1.docx')
docx库除了提供了厘米(Cm)外,还有英寸(Inches)
3.6 样式
段落样式
段落样式包括:对齐、列表样式、行间距、缩进、背景色等,可以在添加段落时设定,也可以在添加之后设置
3.6.1 列表样式
from docx import Document
# 创建word文档
document = Document()
# 添加一个段落,设置为无序列表样式
p1 = document.add_paragraph('截至2022年,中国糖尿病患者近1.3亿。')
p2 = document.add_paragraph('截至2022年,中国糖尿病患者近1.3亿。')
p1.style = 'List Bullet'
p2.style = 'List Bullet'
# 或者 直接传入样式参数
document.add_paragraph('截至2022年,中国糖尿病患者近1.3亿。', style='List Bullet')
document.add_paragraph('截至2022年,中国糖尿病患者近1.3亿。', style='List Bullet')
# 保存
document.save('./test2.docx')
3.6 2 段落格式
行间距、缩进等
from docx import Document
from docx.shared import Pt
# 创建word文档
document = Document()
# 添加段落
p = document.add_paragraph('截至2022年,中国糖尿病患者近1.3亿。')
pf = p.paragraph_format
# 左缩进
# pf.left_indent = Pt(20)
# 右缩进
# pf.right_indent = Pt(20)
# 首行缩进
pf.first_line_indent = Pt(20)
# 行间距
pf.line_spacing = 1
# 保存
document.save('./test2.docx')
3.6.2 文字样式
设置 字体/字号/颜色,加粗/下划线斜体等
# -*- coding: utf-8 -*-
from docx import Document
from docx.shared import Pt, RGBColor
from docx.oxml.ns import qn
# 创建word文档
document = Document()
# 添加一个段落,设置为无序列表样式
p = document.add_paragraph('截至2022年,中国糖尿病患者近1.3亿。')
pf = p.paragraph_format
# 左缩进
# pf.left_indent = Pt(20)
# 右缩进
# pf.right_indent = Pt(20)
# 首行缩进
pf.first_line_indent = Pt(20)
# 行间距
pf.line_spacing = 1
# 在段落中追加
run = p.add_run('中国糖尿病患病原因受生活方式、老龄化、城市化、家族遗传等多种因素影响。')
# 设置字号
run.font.size = Pt(20)
# 设置字体
run.font.name = '微软雅黑'
run.element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
# 设置字体颜色
run.font.color.rgb = RGBColor(255, 0, 0)
# 在段落中追加
run1 = p.add_run('同时,糖尿病患者趋向年轻化。')
# 设置字号
run1.font.size = Pt(10)
# 设置字体
run1.font.name = '微软雅黑'
run1.element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
# 设置字体颜色
run1.font.color.rgb = RGBColor(40, 40, 40)
# 加粗
run1.font.bold = True
# 下划线
run1.font.underline = True
# 斜体
run1.font.italic = True
# 保存
document.save('./test2.docx')
3.7 样式应用
如何给word文档设置全局的样式呢, 添加标题、段落等使用全局的样式类型?
3.7.1 添加样式
方式一: 自定义一个样式
# -*- coding: utf-8 -*-
from docx.document import Document as Docx
from docx import Document
from docx.enum.style import WD_STYLE_TYPE
from docx.shared import Pt
from docx.oxml.ns import qn
# 创建文档
document: Docx = Document()
print(type(document))
# 添加样式
styles = document.styles # 当前文档的样式
p_style = styles.add_style('p_style', WD_STYLE_TYPE.PARAGRAPH) # 添加一个样式
# 设置字体
p_font = p_style.font
p_font.name = '微软雅黑'
p_style._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
# 设置字体大小
p_font.size = Pt(18)
# 添加段落 使用定义的样式
document.add_paragraph('这是一个段落', style=p_style.name)
document.save('./test3.docx')
方式二: 修改默认的样式
# -*- coding: utf-8 -*-
import docx.document as Docx
from docx import Document
from docx.enum.style import WD_STYLE_TYPE
from docx.shared import Pt
from docx.oxml.ns import qn
# 创建文档
document: Docx = Document()
# 添加样式
styles = document.styles
styles['Normal'].font.name = '微软雅黑'
styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
styles['Normal'].font.size = Pt(18)
# 添加段落
document.add_paragraph('这是一个段落')
document.save('./test4.docx')
3.7.2 定义段落格式
from docx.enum.style import WD_STYLE_TYPE
from docx.shared import Inches, Pt
document = Document()
style = document.styles.add_style('Indent', WD_STYLE_TYPE.PARAGRAPH)
paragraph_format = style.paragraph_format
paragraph_format.left_indent = Inches(0.25)
paragraph_format.first_line_indent = Inches(-0.25)
paragraph_format.space_before = Pt(12)
paragraph_format.widow_control = True
3.7.3 设置页眉页脚
# -*- coding: utf-8 -*-
from docx.document import Document as Docx
from docx import Document
from docx.enum.style import WD_STYLE_TYPE
from docx.shared import Pt
from docx.oxml.ns import qn
# 创建文档
document: Docx = Document()
# 添加样式
styles = document.styles
styles['Normal'].font.name = '微软雅黑'
styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
styles['Normal'].font.size = Pt(18)
# 页眉页脚设置
section = document.sections[0]
header = section.header
header.paragraphs[0].text = '设置页眉信息'
header.paragraphs[0].style.font.size = Pt(10)
footer = section.footer
footer.paragraphs[0].text = '设置页脚信息'
footer.paragraphs[0].style.font.size = Pt(10)
# 添加段落
document.add_paragraph('这是一个段落')
document.save('./test4.docx')
3.7.4 段落对齐方式
属性 | 说明 |
---|---|
LEFT | 左对齐 |
CENTER | 居中 |
RIGHT | 右对齐 |
JUSTIFY | 自由调整 |
DISTRIBUTE | 占满整个段落的宽度 |
JUSTIFY_MED | 以中等字符压缩比调整 |
JUSTIFY_HI | 具有高字符压缩比 |
JUSTIFY_LOW | 以较低的字符压缩比进行调整 |
THAI_JUSTIFY | 根据泰语格式布局对齐 |
代码示例
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT # 或者导入WD_ALIGN_PARAGRAPH
paragraph = document.add_paragraph()
paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
标签:docx,Document,word,python,add,paragraph,import,document
From: https://www.cnblogs.com/itelephant/p/16888990.html