案例

官网地址: https://python-docx.readthedocs.io/en/latest/

pip install python-docx

from docx import Document
from docx.shared import Inches document = Document() document.add_heading('Document Title', 0) p = document.add_paragraph('A plain paragraph having some ')
p.add_run('bold').bold = True
p.add_run(' and some ')
p.add_run('italic.').italic = True document.add_heading('Heading, level 1', level=1)
document.add_paragraph('Intense quote', style='Intense Quote') document.add_paragraph(
'first item in unordered list', style='List Bullet'
)
document.add_paragraph(
'first item in ordered list', style='List Number'
) # document.add_picture('touxiang2.jpg', width=Inches(1.25)) records = (
(3, '101', 'Spam'),
(7, '422', 'Eggs'),
(4, '631', 'Spam, spam, eggs, and spam')
) table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'
for qty, id, desc in records:
row_cells = table.add_row().cells
row_cells[0].text = str(qty)
row_cells[1].text = id
row_cells[2].text = desc document.add_page_break() document.save('demo.docx')

添加图片并设置图片大小

from docx import Document
from docx.shared import Inches
document = Document()
document.add_picture(open('mm.png', mode='rb'),width=Inches(6.0), height=Inches(6.0))
document.save('test.docx')

其它案例

from docx import Document
from docx.shared import Inches

document = Document()
# 0,标题:一、关于图片
document.add_heading('一、关于图片', level=2)
# 1,添加图片
document.add_paragraph('1,添加图片')
document.add_picture('mm.png')
# 2,设置图片大小 Inches(1.0)
document.add_paragraph('2,设置图片大小 width=Inches(1.0)')
document.add_picture('mm.png', width=Inches(1.0))

# 3,设置图片大小 Inches(4.0)
document.add_paragraph('3,设置图片大小 width=Inches(4.0)')
document.add_picture('mm.png', width=Inches(4.0))

# 4,设置图片大小 Inches(6.0)
document.add_paragraph('4,设置图片大小 width=Inches(6.0)')
document.add_picture('mm.png', width=Inches(6.0))

# 5,设置图片大小 width=Inches(6.0),height=Inches(6.0)
document.add_paragraph('5,设置图片大小 width=Inches(6.0),height=Inches(6.0)')
document.add_picture('mm.png', width=Inches(6.0), height=Inches(6.0))

# 最后保存成word文档
document.save("mcw.docx")
print("docx保存成功!")

document.add_paragraph('4,设置图片大小 width=Inches(6.0)')  这个应该是添加正文,看类型是正文类型

1.概念

块级元素(block-level) 是指作为一个整体的元素,典型的是段落(paragraph)。
行内元素(inline) ,你可以把它理解为一部分块级元素,即一个块级元素包含一个或多个行内元素,典型的是run对象(我也不知道run应该翻译成什么)。
举个例子,你在Word回车换行开始输入文本,即自成一个段落,如果你选中其中的几个文字,那这些文字即为run对象

2.段落

段落(paragraph)是最主要的块级元素,比如说我们要往文档里添加文字,其实就添加段落,add_paragraph()可以添加一个段落,返回一个Paragraph对象

2.1 插入段落

往下添加段落,往指定段落前插入段落

from docx import Document
from docx.text.paragraph import Paragraph doc = Document() paragraph1 = doc.add_paragraph("这是第1个段落")
paragraph2 = doc.add_paragraph("这是第2个段落") # type: Paragraph
# 查看文档的所有列表
print(doc.paragraphs) # 返回包含文档所有段落的列表
# 在paragraph2这个段落的前面插入一个段落
paragraph2.insert_paragraph_before("额外插入的段落文字") doc.save("./test.docx")

2.1 段落样式

2.1.1 引用内置样式

设置Paragraph的style属性即可

from docx import Document
from docx.text.paragraph import Paragraph doc = Document() paragraph1 = doc.add_paragraph("这是第1个段落") # type: Paragraph
paragraph1.style = "List Bullet" # 设置段落样式为无序1 # 有序段落样式
doc.add_paragraph("测试段落List Number", style="List Number")
doc.add_paragraph("测试段落List Number", style="List Number") # 无序段落样式2
doc.add_paragraph("测试段落List Bullet 2", style="List Bullet 2")
doc.add_paragraph("测试段落List Bullet 2", style="List Bullet 2") doc.save("./test.docx") # 一些常用的段落样式
# styles = doc.styles
# paragraph_styles = [s for s in styles if s.type == WD_STYLE_TYPE.PARAGRAPH]
# for style in paragraph_styles:
# print(style.name)

有下面的样式

['Normal', 'Header', 'Footer', 'Heading 1', 'Heading 2', 'Heading 3', 'Heading 4', 'Heading 5', 'Heading 6', 'Heading 7', 'Heading 8',
'Heading 9', 'No Spacing', 'Title', 'Subtitle', 'List Paragraph', 'Body Text', 'Body Text 2', 'Body Text 3', 'List', 'List 2', 'List 3', 'List Bullet',
'List Bullet 2', 'List Bullet 3', 'List Number', 'List Number 2', 'List Number 3', 'List Continue', 'List Continue 2', 'List Continue 3',
'macro', 'Quote', 'Caption', 'Intense Quote', 'TOC Heading']

官方文档说段落样式名应该与微软Office保持一致,但我看了微软给出的样式名与其对不上,建议直接参考源码的给出的枚举值,位置是/docx/enum/style.py,或者官方文档:https://python-docx.readthedocs.io/en/latest/user/styles-understanding.html

2.1.2 段落对齐

from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT doc = Document() paragraph1 = doc.add_paragraph("这是居中对齐段落")
paragraph1.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中对齐 doc.add_paragraph("这是左对齐段落").alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 左对齐
doc.add_paragraph("这是右对齐段落").alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT # 右对齐
doc.add_paragraph("这是两端对齐段落").alignment = WD_PARAGRAPH_ALIGNMENT.JUSTIFY # 两端对齐
doc.add_paragraph("这是分散对齐段落").alignment = WD_PARAGRAPH_ALIGNMENT.DISTRIBUTE # 分散对齐 doc.save("./test.docx")

2.1.3 段落设置

from docx import Document
from docx.shared import Pt doc = Document() paragraph1 = doc.add_paragraph("这是一个普通的段落这是一个普通的段落这是一个普通的段落这是一个普通的段落这是一个普通的段落这是一个普通的段落这是一个普通的段落这是一个普通的段落这是一个普通的段落这是一个普通的段落这是一个普通的段落这是一个普通的段落这是一个普通的段落这是一个普通的段落这是一个普通的段落")
# paragraph.line_spacing_rule = WD_LINE_SPACING.EXACTLY # 行距固定值
# paragraph.line_spacing_rule = WD_LINE_SPACING.MULTIPLE # 多倍行距
# paragraph1.paragraph_format.line_spacing = 1.5 # 行间距,1.5倍行距
paragraph1.paragraph_format.line_spacing = Pt(20) # 行间距,固定值20磅
paragraph1.paragraph_format.first_line_indent = Pt(10) # 首行缩进10磅
paragraph1.paragraph_format.space_before = Pt(30) # 段前30磅
paragraph1.paragraph_format.space_after = Pt(15) # 段后15磅 doc.save("./test.docx")

特别说明,首行缩进的单位支持Pt、Cm、Mm、Inches等,如果想要缩进几个字符,需要自己进行转换,因为不同字号字符占用的磅数是不同的(五号字体 = 10.5pt = 3.70mm = 14px = 0.146inch)

3.Run

Run是指段落中某一部分文本,我们取到某些文本之后才能设置它们的样式,例如加粗、斜体、下划线等

from docx import Document
from docx.oxml.ns import qn
from docx.shared import Pt, RGBColor
from docx.text.paragraph import Paragraph doc = Document() paragraph1 = doc.add_paragraph("这是第1个段落") # type: Paragraph
run1 = paragraph1.add_run("追加的文字")
run1.bold = True # 加粗
run1.italic = True # 斜体
run1.underline = True # 下划线
# run1.text = "修改之后的文字" # 修改文本
run1.font.name = "Times New Roman" # 设置西文是新罗马字体
run1.element.rPr.rFonts.set(qn('w:eastAsia'), '宋体') # 设置中文是宋体
run1.font.size = Pt(30) # 字号大小
run1.font.bold = False # 是否加粗
run1.font.italic = False # 是否斜体
run1.font.underline = False # 是否下划线
run1.font.shadow = True # 是否阴影
run1.font.color.rgb = RGBColor(56, 36, 255) # 字体颜色
# run1.font.color.rgb = RGBColor.from_string("ff0056") # 字体颜色 doc.save("./test.docx")

关于下划线,font.underline=True是单行下划线,其他样式可以参考官方给出的枚举值:https://python-docx.readthedocs.io/en/latest/api/enum/WdUnderline.html#wdunderline

当然也可以直接使用完整的字符样式

from docx import Document
from docx.text.paragraph import Paragraph doc = Document() paragraph1 = doc.add_paragraph("这是第1个段落") # type: Paragraph
run2 = paragraph1.add_run("又追加了文字")
run2.style = "Emphasis" # 使用“强调”样式 doc.save("./test.docx")

4.标题

可以通过add_heading()添加标题,标题等级用数字0-9表示,其实标题也是一个Paragraph对象

from docx import Document

doc = Document()
title = doc.add_heading(text="这是一级标题", level=1) # type: Paragraph
doc.add_heading(text="这是一级标题2", level=1)
doc.add_heading(text="这是二级标题", level=2)
print("text:", title.text) # text: 这是一级标题
print("style:", title.style) # style: _ParagraphStyle('Heading 1') id: 1883614425040
doc.save("./test.docx")

标题等级(level)默认是1,对应“标题1”,如果设置为0,对应“标题”

5.Document对象常用方法和属性

from docx import Document
from docx.shared import Inches
from docx.text.paragraph import Paragraph doc = Document() doc.add_heading("这是一个标题")
doc.add_paragraph("这是一个段落")
doc.add_page_break() # 插入一个分页符,实际上是调用新建段落的add_break(WD_BREAK.PAGE)
doc.add_picture('麒麟神兽.png', width=Inches(1.0)) # 添加一张图片,实际上是调用新建段落的run.add_picture
doc.add_table(5, 6) # 添加一个5行6列的表格 print(doc.paragraphs) # 返回所有段落(列表)
print(doc.tables) # 返回所有表格(列表)
print(doc.styles) # 返回默认Styles对象 doc.save("./test.docx")

的确分页了,这是第二页

参考链接:https://blog.csdn.net/qq_39147299/article/details/125179590

python-docx操作word文档详解的更多相关文章

  1. C#使用Docx操作word文档

    C#使用Docx编写word表格 最近接手了一个小Demo,要求使用Docx,将Xml文件中的数据转换为word文档,组织数据形成表格. 写了已经一周,网络上的知识太零碎,就想自己先统计整理出来,方便 ...

  2. C#中使用Spire.docx操作Word文档

    使用docx一段时间之后,一些地方还是不方便,然后就尝试寻找一种更加简便的方法. 之前有尝试过使用Npoi操作word表格,但是太烦人了,随后放弃,然后发现免费版本的spire不错,并且在莫种程度上比 ...

  3. 利用Python操作Word文档【图片】

    利用Python操作Word文档

  4. MYSQL服务器my.cnf配置文档详解

    MYSQL服务器my.cnf配置文档详解 硬件:内存16G [client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-re ...

  5. Python批量创建word文档(2)- 加图片和表格

    Python创建word文档,任务要求:小杨在一家公司上班,每天都需要给不同的客户发送word文档,以告知客户每日黄金价格.要求在文档开始处给出banner条,价格日期等用表格表示.最后贴上自己的联系 ...

  6. Python批量创建word文档(1)- 纯文字

    Python创建word文档,任务要求:小杨在一家公司上班,每天都需要给不同的客户发送word文档,以告知客户每日黄金价格.最后贴上自己的联系方式.代码如下: 1 ''' 2 #python根据需求新 ...

  7. iText操作word文档总结

    操作word文档的工具有很多,除了iText之外还有POI,但是POI擅长的功能是操作excel,虽然也可以操作word,但是能力有限,而且还有很多的bug,技术并不成熟,下面就重点介绍一种操作wor ...

  8. C#操作Word文档(加密、解密、对应书签插入分页符)

    原文:C#操作Word文档(加密.解密.对应书签插入分页符) 最近做一个项目,客户要求对已经生成好的RTF文件中的内容进行分页显示,由于之前对这方面没有什么了解,后来在网上也找了相关的资料,并结合自己 ...

  9. python自动化之word文档

    #########################docx文件############################ ''' .docx文件有很多结构,有3种不同的类型来表示 在最高一层,Docum ...

  10. Java文件操作系列[3]——使用jacob操作word文档

    Java对word文档的操作需要通过第三方组件实现,例如jacob.iText.POI和java2word等.jacob组件的功能最强大,可以操作word,Excel等格式的文件.该组件调用的的是操作 ...

随机推荐

  1. PAT (Basic Level) Practice 1018 锤子剪刀布 分数 20

    大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入 ...

  2. ETL工具Datax、sqoop、kettle 的区别

    一.Sqoop主要特点: 1.可以将关系型数据库中的数据导入到hdfs,hive,hbase等hadoop组件中,也可以将hadoop组件中的数据导入到关系型数据库中: 2.sqoop在导入导出数据时 ...

  3. 关于AWS-EC2或者多个资源的tag的批量添加-基于Resource Groups & Tag Editor 和 命令处理

    今天收到一个请求,需要对公司所有的ec2-添加上两个成本IO标签,因为机器太多了 想到了如下两种方案去批量处理 方案一:利用aws的 [Management Tools]下的 Resource Gro ...

  4. ciscn 2022 misc 部分wp

    ​ 目录 everlasting_night ez_usb everlasting_night 提示是注意png数据块 然后注意图片通道数据可以用来lsb解码 下载是一张图片,尝试几种方法之后没有太大 ...

  5. 作用域通信对象:session用户在登录时通过`void setAttribute(String name,Object value)`方法设置用户名和密码。点击登录按钮后,跳转到另外一个页面显示用户

    作用域通信对象:session session对象基于会话,不同用户拥有不同的会话.同一个用户共享session对象的所有属性.作用域开始客户连接到应用程序的某个页面,结束与服务器断开连接.sessi ...

  6. 前端框架Vue------>第一天学习(2) v-if

    API:https://cn.vuejs.org/v2/api/#key 文章目录 5.条件渲染 5.1 . v-if 5.2 . v-else-if 6 .列表渲染 7 .事件监听 5.条件渲染 5 ...

  7. vue3中$attrs的变化与inheritAttrs的使用

    在vue3中的$attrs的变化 $listeners已被删除合并到$attrs中. $attrs现在包括class和style属性. 也就是说在vue3中$listeners不存在了.vue2中$l ...

  8. SQL中的内置函数

    IsNull的使用 isnull(name,' ')<>' '    ---如果name为null则就将name转化为' ',然后判断不等于' ',    目的:判断name不等于null ...

  9. 【神经网络】丢弃法(dropout)

    丢弃法是一种降低过拟合的方法,具体过程是在神经网络传播的过程中,随机"沉默"一些节点.这个行为让模型过度贴合训练集的难度更高. 添加丢弃层后,训练速度明显上升,在同样的轮数下测试集 ...

  10. Debian安装WPS的方法

    1.防止安装失败,请尽量重启电脑,关闭系统的软件商店,因为商店的权限可能会锁住pkg的配置文件,导致无法安装wps. 2.将原机残废的WPS卸载干净,卸载方法:手动或命令行操作. sudo apt r ...