python-docx 用于创建和更新Word文件的python库
1. 安装
pip3 install python-docx -i https://mirrors.aliyun.com/pypi/simple
2. 创建与保存文件
#导入Document
from docx import Document
# 创建一个新文档
doc = Document()
print(type(doc)) # <class 'docx.document.Document'>
# doc=Document("file.docx") 可以打开一个新文档
# 保存文件
doc.save("hello.docx")
3. 标题
from docx import Document
doc = Document()
# 添加标题
# text=内容, level=级别 (1-9)
heading = doc.add_heading(text="1级标题", level=1)
# 返回的是一个段落,说明标题也是段落的一种
print(type(heading)) # <class 'docx.text.paragraph.Paragraph'>
for i in range(2, 10):
doc.add_heading(text=f"{i}级标题", level=i)
doc.save("hello.docx")
4. 段落
4.1 添加段落
from docx import Document
doc = Document()
# 在文档尾添加一个段落,返回这个段落的引用
p1 = doc.add_paragraph(text="第一段")
p2 = doc.add_paragraph(text="第二段")
# 插入段落
p1_5 = p2.insert_paragraph_before("第二段前插入一段")
doc.save("hello.docx")
4.2 指定段落样式
4.2.1 无序列表
from docx import Document
doc = Document()
doc.add_paragraph("三国演义", style="List Bullet")
doc.add_paragraph("红楼梦", style="List Bullet")
p = doc.add_paragraph("西游记")
p.style = "List Bullet"
doc.save("hello.docx")
List Bullet生成一个无序列表。
4.2.2 有序列表
from docx import Document
doc = Document()
for p in ["红楼梦", "三国演义", "西游记", "水浒传"]:
doc.add_paragraph(p, style="List Number")
doc.save("hello.docx")
List Number 生成一个有序列表。
4.3.3 添加一个新样式,并应用这个样式
from docx import Document
from docx.enum.style import WD_STYLE_TYPE
from docx.shared import Pt, RGBColor
doc = Document()
# 添加一个段落样式,在word样式中会多出一个my_style的样式
style = doc.styles.add_style('my_style', WD_STYLE_TYPE.PARAGRAPH)
# 设置样式的:字号,字体,颜色
style.font.size = Pt(18)
style.font.name = "Showcard Gothic"
style.font.color.rgb = RGBColor(255, 0, 0)
# 创建并应用段落样式
doc.add_paragraph("Hello world!", style=style)
doc.save("hello.docx")
4.3 段落的对齐方式
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
doc = Document()
p1 = doc.add_paragraph("hello")
# 左对齐
p1.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
p2 = doc.add_paragraph("hello")
# 居中对齐
p2.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
doc.save("hello.docx")
对齐方式有:
对齐方式 | 值 | 说明 |
---|---|---|
LEFT | 0 | 左对齐 |
RIGHT | 1 | 右对齐 |
CENTER | 2 | 居中对齐 |
JUSTIFY | 3 | 两端对齐 |
DISTRIBUTE | 4 | 分散对齐 |
4.4 段落的缩进
from docx import Document
from docx.shared import Cm
text = '燕子去了,有再来的时候;杨柳枯了,有再青的时候;桃花谢了,有再开的时候。但是,聪明的,你告诉我,我们的日子为什么一去不复返呢?——是有人偷了他们罢:那是谁?又藏在何处呢?是他们自己逃走了罢:如今又到了哪里呢?'
doc = Document()
p1 = doc.add_paragraph(text)
# 左缩进二厘米
p1.paragraph_format.left_indent = Cm(2)
doc.save("hello.docx")
缩进的方式有:
缩进 | 说明 |
---|---|
left_indent | 左缩进 |
right_indent | 右缩进 |
first_line_indent | 首行缩进 |
常用单位:
- Cm厘米
- Pt 磅
- Mm 毫米
- Inches 英寸
4.4.1 悬挂缩进在哪里?
首先缩进支持负值,就相当于悬挂缩进了,如:
from docx import Document
from docx.shared import Cm
text = '燕子去了,有再来的时候;杨柳枯了,有再青的时候;桃花谢了,有再开的时候。但是,聪明的,你告诉我,我们的日子为什么一去不复返呢?——是有人偷了他们罢:那是谁?又藏在何处呢?是他们自己逃走了罢:如今又到了哪里呢?'
doc = Document()
p1 = doc.add_paragraph(text)
# 缩进二厘米(整体向右移动2)
p1.paragraph_format.left_indent = Cm(2)
# 首先缩进-2厘米,首先向左移动2厘米,整体效果就是悬挂缩进
p1.paragraph_format.first_line_indent = Cm(-2)
doc.save("hello.docx")
4.4.2 如何首行缩进2个字符
from docx import Document
from docx.shared import Cm, Pt
text = '燕子去了,有再来的时候;杨柳枯了,有再青的时候;桃花谢了,有再开的时候。但是,聪明的,你告诉我,我们的日子为什么一去不复返呢?——是有人偷了他们罢:那是谁?又藏在何处呢?是他们自己逃走了罢:如今又到了哪里呢?'
doc = Document()
p1 = doc.add_paragraph(text)
# 先设置字号(三号),之后获取字体对应字号的大小*2 即可
p1.style.font.size = Pt(16)
p1.paragraph_format.first_line_indent = p1.style.font.size * 2
doc.save("hello.docx")
4.5 段落间距(段前,段后)
from docx import Document
from docx.shared import Cm, Pt
text = '燕子去了,有再来的时候;杨柳枯了,有再青的时候;桃花谢了,有再开的时候。但是,聪明的,你告诉我,我们的日子为什么一去不复返呢?——是有人偷了他们罢:那是谁?又藏在何处呢?是他们自己逃走了罢:如今又到了哪里呢?'
doc = Document()
for i in range(5):
p1 = doc.add_paragraph(text)
# 段前
p1.paragraph_format.space_before = Pt(20)
# 段后
p1.paragraph_format.space_after = Pt(10)
doc.save("hello.docx")
4.6 行距
from docx import Document
from docx.shared import Cm, Pt
text = '燕子去了,有再来的时候;杨柳枯了,有再青的时候;桃花谢了,有再开的时候。但是,聪明的,你告诉我,我们的日子为什么一去不复返呢?——是有人偷了他们罢:那是谁?又藏在何处呢?是他们自己逃走了罢:如今又到了哪里呢?'
doc = Document()
p = doc.add_paragraph(text)
# 1.5倍行距
p.paragraph_format.line_spacing = 1.5
p = doc.add_paragraph(text)
# 24磅行距
p.paragraph_format.line_spacing = Pt(24)
doc.save("hello.docx")
4.7 分页属性
用于控制段落在页面边界附近的行为
-
keep_together 段中不分页
-
keep_with_next 与下段同页
-
page_break_before 段前分页
-
widow_control 孤行控制
# 这四个属性可以设置为True, False, None
p.paragraph_format.widow_control = True
5. 添加硬分页
当一页没满,希望在另一页继续,则可以添加一个分页符。
from docx import Document
doc = Document()
for i in range(1, 5):
doc.add_paragraph(f"第{i}页")
doc.add_page_break()
doc.save("hello.docx")
标签:docx,python,doc,add,paragraph,import,Document
From: https://www.cnblogs.com/three-sheep/p/17416940.html