本例环境基于ubuntu18.04,python3,wps
。所有本例用到的类库都使用pip3来安装。首先安装pip3。
sudo apt install pip3
安装处理word文档用到的python类库python-docx
。
pip3 install python-docx
一下是官方文档的一段示例代码,此处添加了注释:
# coding=utf-8
from docx import Document # 文档对象
from docx.shared import Inches # 英尺
# 创建文档对象
document = Document()
# 增加文档标题(0级标题)
document.add_heading('文章标题',0)
# 增加段落
p = document.add_paragraph('你让他用戒指把你套上的时候,我察觉到你脸上复杂的笑容。')
# 段落后追加内容并设置追加的内容为粗体
p.add_run('追加的段落内容,样式为粗体。').bold = True
# 段落后追加内容并设置追加的内容为斜体
p.add_run('追加的段落内容,样式为斜体').italic = True
# 添加一级标题
document.add_heading('一级标题', level = 1)
#添加段落并设置段落为引用样式
document.add_paragraph('添加段落并添加了样式,此处的样式为引用', style= 'Intense Quote')
#增加段落并在段落前面加上项目符号(List Bullet样式为)
document.add_paragraph(
'此处是项目符号样式', style = 'List Bullet'
)
#增加段落并添加编号
document.add_paragraph(
'此处是编号样式', style = 'List Number'
)
# 添加图片并设置宽度为5英寸
document.add_picture('xq.jpg', width=Inches(5))
#创建一个二维元组,保存即将操作的表格的内容
records = (
(1, '张三', '30'),
(2, '李四', '35'),
(3, '王五', '38')
)
# 创建一个1行3列的表格
table = document.add_table(rows=1,cols=3)
# 在表格第一行填充内容
hdr_cells = table.rows[0].cells
hdr_cells[0].text= '编号'
hdr_cells[1].text= '姓名'
hdr_cells[2].text= '年龄'
# 将定义好的表格内容追加进表格中
for bh, nl, xb in records:
# 表格追加一行并分别填充1,2,3单元格
row_cells = table .add_row().cells
row_cells[0].text = str(bh)
row_cells[1].text = nl
row_cells[2].text = xb
# 添加分页符
document.add_page_break()
#保存文档
document.save('demo.docx')
生成的文档如下图:
document = Document('文档.docx')
document.save('新文档.docx')
#此处的操作是基于原来的文档内容新建了一个文档,原来的文档还存在
# 此处的b表示以二进制格式打开,以兼容win环境和某些低版本的linux.
f = open('demo.docx', 'rb')
document = Document(f)
f.close()
from io import BytesIO
with open('demo1.docx', 'rb') as f:
source_stream = BytesIO(f.read())
document = Document(source_stream)
source_stream.close()
#此处可以对document进行其他操作,最后保存文档
document.save('demo2.docx')
由于段落有多种属性,通常定义一个段落样式,将很多属性放在样式中,然后样式应用于段落。
水平对齐
,用到的是枚举WD_PARAGRAPH_ALIGNMENT的值。可选的值有:CENTER
:居中对齐DISTRIBUTE
:分散对齐JUSTIFY
:两端对齐THAI_JUSTIFY
JUSTIFY_HI
:JUSTIFY_LOW
JUSTIFY_MED
LEFT
:左对齐RIGHT
:右对齐# coding=utf-8
from docx import Document # 文档对象
from docx.enum.text import WD_ALIGN_PARAGRAPH
document = Document()
# 定义三个段落,分别演示左中右对齐
paragraph1 = document.add_paragraph(
'段落对齐测试(水平左对齐)'
)
paragraph2= document.add_paragraph(
'段落对齐测试(水平居中对齐)'
)
paragraph3= document.add_paragraph(
'段落对齐测试(水平右对齐)'
)
# 定义段落样式
paragraph_format1 = paragraph1.paragraph_format
paragraph_format2 = paragraph2.paragraph_format
paragraph_format3 = paragraph3.paragraph_format
# 在段落样式上添加对齐属性,可以添加其他更多属性
paragraph_format1.alignment = WD_ALIGN_PARAGRAPH.LEFT
paragraph_format2.alignment = WD_ALIGN_PARAGRAPH.CENTER
paragraph_format3.alignment = WD_ALIGN_PARAGRAPH.RIGHT
document.save('demo3.docx')
样式如图所示:
from docx.shared import Pt #像素
document = Document()
#定义三个段落,分别演示左中右对齐
paragraph1 = document.add_paragraph(
'段落缩进(左缩进)'
)
paragraph2= document.add_paragraph(
'段落缩进(右缩进)'
)
paragraph3= document.add_paragraph(
'首行缩进首行缩进首行缩进首行缩进首行缩进首行缩进首行缩进首行缩进首行缩进首行缩进首行缩进首行缩进首行缩进首行缩进首行缩进'
)
#定义段落样式
paragraph_format1 = paragraph1.paragraph_format
paragraph_format2 = paragraph2.paragraph_format
paragraph_format3 = paragraph3.paragraph_format
#左缩进0.5英尺
paragraph_format1.left_indent = Inches(0.5)
#右缩进24像素
paragraph_format2.right_indent = Pt(24)
#首行缩进(负值表示悬挂缩进)
#paragraph_format3.first_line_indent = Inches(0.5)
paragraph_format3.first_line_indent = Inches(-0.5)
document.save('demo4.docx')
样式如下:
#段前间距
paragraph_format.space_before = Pt(18)
#段后间距
paragraph_format.space_after = Pt(12)
from docx.shared import Length
paragraph_format.line_spacing = Pt(18)
from docx.shared import RGBColor
document = Document()
run = document.add_paragraph().add_run()
font = run.font
#设置字体字号斜体粗体字体颜色
font.name = 'Calibri'
font.size = Pt(12)
font.italic = True
font.bold = True
font.color.rgb = RGBColor(0x42, 0x24, 0xE9)
样式分为段落样式,表格样式,段落样式可选:
Body Text,Body Text 2,Body Text 3,Caption,Heading 3,Heading 4,Heading 5,Heading 6,Heading 7,Heading 8,Heading 9,Intense Quote,List,List 2,List 3,List Bullet,List Bullet 2,List Bullet 3,List Continue,List Continue 2,List Continue 3,List Number,List Number 2,List Number 3,List Paragraph,macro,Normal,Header,Footer,Heading 1,Heading 2,No Spacing,Quote,Subtitle,Title,TOC Heading
表格样式可选:
Normal Table,Table Grid,Light Shading,Light Shading Accent 1,Light Shading Accent 2,Light Shading Accent 3,Light Shading Accent 4,Light Shading Accent 5,Light Shading Accent 6,Light List,Light List Accent 1,Light List Accent 2,Light List Accent 3,Light List Accent 4,Light List Accent 5,Light List Accent 6,Light Grid,Light Grid Accent 1,Light Grid Accent 2,Light Grid Accent 3,Light Grid Accent 4,Light Grid Accent 5,Light Grid Accent 6,Medium Shading 1,Medium Shading 1 Accent 1,Medium Shading 1 Accent 2,Medium Shading 1 Accent 3,Medium Shading 1 Accent 4,Medium Shading 1 Accent 5,Medium Shading 1 Accent 6,Medium Shading 2,Medium Shading 2 Accent 1,Medium Shading 2 Accent 2,Medium Shading 2 Accent 3,Medium Shading 2 Accent 4,Medium Shading 2 Accent 5,Medium Shading 2 Accent 6,Medium List 1,Medium List 1 Accent 1,Medium List 1 Accent 2,Medium List 1 Accent 3,Medium List 1 Accent 4,Medium List 1 Accent 5,Medium List 1 Accent 6,Medium List 2,Medium List 2 Accent 1,Medium List 2 Accent 2,Medium List 2 Accent 3,Medium List 2 Accent 4,Medium List 2 Accent 5,Medium List 2 Accent 6,Medium Grid 1,Medium Grid 1 Accent 1,Medium Grid 1 Accent 2,Medium Grid 1 Accent 3,Medium Grid 1 Accent 4,Medium Grid 1 Accent 5,Medium Grid 1 Accent 6,Medium Grid 2,Medium Grid 2 Accent 1,Medium Grid 2 Accent 2,Medium Grid 2 Accent 3,Medium Grid 2 Accent 4,Medium Grid 2 Accent 5,Medium Grid 2 Accent 6,Medium Grid 3,Medium Grid 3 Accent 1,Medium Grid 3 Accent 2,Medium Grid 3 Accent 3,Medium Grid 3 Accent 4,Medium Grid 3 Accent 5,Medium Grid 3 Accent 6,Dark List,Dark List Accent 1,Dark List Accent 2,Dark List Accent 3,Dark List Accent 4,Dark List Accent 5,Dark List Accent 6,Colorful Shading,Colorful Shading Accent 1,Colorful Shading Accent 2,Colorful Shading Accent 3,Colorful Shading Accent 4,Colorful Shading Accent 5,Colorful Shading Accent 6,Colorful List,Colorful List Accent 1,Colorful List Accent 2,Colorful List Accent 3,Colorful List Accent 4,Colorful List Accent 5,Colorful List Accent 6,Colorful Grid,Colorful Grid Accent 1,Colorful Grid Accent 2,Colorful Grid Accent 3,Colorful Grid Accent 4,Colorful Grid Accent 5,Colorful Grid Accent 6
# 以下两种方式都可以设置段落样式
paragraph.style = document.styles['Heading 1']
paragraph.style = 'List Bullet'
table.style = 'Colorful Grid Accent 6'
sections对象是Document的直接子对象,主要 用来操作页面布局以及页边距等,中文叫做段
或者节
。一个文档通常只有一段,而含有多个段的文档通常是文档中既有横向布局的页面也有纵向布局的页面。
from docx.enum.section import WD_ORIENT
document = Document()
#获取节对象
sections = document.sections
section = sections[0]
# 修改页宽和页高
section.page_height = Inches(5)
section.page_width = Inches(8.5)
# 修改页面布局为横向布局
section.orientation = WD_ORIENT.LANDSCAPE
#修改页面布局为纵向布局
#section.orientation = WD_ORIENT.PORTRAIT
#左边距
section.left_margin = Inches(1)
#右边距
section.right_margin = Inches(1)
#上边距
section.top_margin = Inches(1)
#下边距
section.bottom_margin = Inches(1)
# 装订线宽度
section.gutter = Inches(0.5)
#页眉宽度
section.header_distance = Inches(0.5)
#页脚宽度
section.footer_distance = Inches(0.5)
document = Document()
section = document.sections[0]
header = section.header
#添加页眉内容并添加样式
paragraph = header.paragraphs[0]
paragraph.text = "文档名称\t文档作者\txxx建筑设计有限公司第六分部"
paragraph.style = document.styles["Header"]
#删除页眉
#is_linked_to_previous是一个布尔属性,添加页眉是此值自动置为False
#将此值手动赋值为True事,将会清除页眉内容
#header.is_linked_to_previous = True
样式如下:
以上介绍了利用python-docx操作word文档的基本内容,更多操作详见官方文档:python-docx
未完待续....
本文地址:https://blog.csdn.net/momo1938/article/details/107089794
如对本文有疑问, 点击进行留言回复!!
老猿学5G:融合计费场景的离线计费会话的Nchf_OfflineOnlyCharging_Release释放操作
老猿学5G扫盲贴:中国移动5G融合计费漫游计费架构和路由方案
老猿学5G扫盲贴:与用户和终端相关的名词UE、SUPI、GPSI、PEI
三星以核心技术优势持续更新折叠手机,华为缺乏自主技术无力应对
网友评论