案例

官网地址: 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. MySQL学习(4)---MySQL索引

    ps:没有特殊说明,此随笔中默认采用innoDB存储引擎中的索引,且索引都是指B+树(多路平衡搜索树)结构组织的索引.其中聚集索引.复合索引.前缀索引.唯一索引默认都是使用B+树,统称为索引. 索引概 ...

  2. Go设计模式学习准备——下载bilibili合集视频

    需求 前段时间面试,被问到设计模式.说实话虽然了解面向对象.多态,但突然被问到设计模式,还要说清解决什么问题,自己是有些懵的,毕竟实习主要工作是在原项目基础进行CRUD,自己还是没有深度思考,所以只能 ...

  3. RAID5 IO处理之replace代码详解

    1 作用 从字面意思理解,replacement即是替换.我们知道硬盘都有一定的使用寿命,可以在硬盘失效之前通过该功能将就盘的数据迁移至新盘.因为replacement的流程是从旧盘中读出数据直接写入 ...

  4. 解决console控制台反复打印“WebSocket connection to ws://localhost:9528/sockjs-node/107/uadaszgz.websocket failed:Invalid frame header

    element-admin-vue 项目console台一直报websocket连接失败 解决办法 1.vue.config.js中配置devServer.proxy的ws为false  (我没成功) ...

  5. 齐博x2自建流媒体RTMP直播服务器

    这里只讲解大家最容易配置的Windows版,测试环境是2008版服务器及WIN7下载下面的软件,解压在任何目录都可,然后双击"启动.bat"即可http://down.php168 ...

  6. Linux正则表达式与grep

    bash是什么 bash是一个命令处理器,运行在文本窗口中,并能执行用户直接输入的命令 bash还能从文件中读取linxu命令,称之为脚本 bash支持通配符.管道.命令替换.条件判断等逻辑控制语句 ...

  7. springMVC实现文件的上传和下载

    文件的下载功能 @RequestMapping("/testDown")public ResponseEntity<byte[]> testResponseEntity ...

  8. 使用LabVIEW实现基于pytorch的DeepLabv3图像语义分割

    前言 今天我们一起来看一下如何使用LabVIEW实现语义分割. 一.什么是语义分割 图像语义分割(semantic segmentation),从字面意思上理解就是让计算机根据图像的语义来进行分割,例 ...

  9. 【lwip】09-IPv4协议&超全源码实现分析

    目录 前言 9.1 IP协议简述 9.2 IP地址分类 9.2.1 私有地址 9.2.2 受限广播地址 9.2.3 直接广播地址 9.2.4 多播地址 9.2.5 环回地址 9.2.6 本地链路地址 ...

  10. Go语言核心36讲

    你好,我是郝林.今天想跟你聊聊我和Go语言的故事. Go语言是由Google出品的一门通用型计算机编程语言.作为在近年来快速崛起的编程语言,Go已经成功跻身主流编程语言的行列. 它的种种亮点都受到了广 ...