python-docx操作word文档详解
案例
官网地址: 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文档详解的更多相关文章
- C#使用Docx操作word文档
C#使用Docx编写word表格 最近接手了一个小Demo,要求使用Docx,将Xml文件中的数据转换为word文档,组织数据形成表格. 写了已经一周,网络上的知识太零碎,就想自己先统计整理出来,方便 ...
- C#中使用Spire.docx操作Word文档
使用docx一段时间之后,一些地方还是不方便,然后就尝试寻找一种更加简便的方法. 之前有尝试过使用Npoi操作word表格,但是太烦人了,随后放弃,然后发现免费版本的spire不错,并且在莫种程度上比 ...
- 利用Python操作Word文档【图片】
利用Python操作Word文档
- MYSQL服务器my.cnf配置文档详解
MYSQL服务器my.cnf配置文档详解 硬件:内存16G [client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-re ...
- Python批量创建word文档(2)- 加图片和表格
Python创建word文档,任务要求:小杨在一家公司上班,每天都需要给不同的客户发送word文档,以告知客户每日黄金价格.要求在文档开始处给出banner条,价格日期等用表格表示.最后贴上自己的联系 ...
- Python批量创建word文档(1)- 纯文字
Python创建word文档,任务要求:小杨在一家公司上班,每天都需要给不同的客户发送word文档,以告知客户每日黄金价格.最后贴上自己的联系方式.代码如下: 1 ''' 2 #python根据需求新 ...
- iText操作word文档总结
操作word文档的工具有很多,除了iText之外还有POI,但是POI擅长的功能是操作excel,虽然也可以操作word,但是能力有限,而且还有很多的bug,技术并不成熟,下面就重点介绍一种操作wor ...
- C#操作Word文档(加密、解密、对应书签插入分页符)
原文:C#操作Word文档(加密.解密.对应书签插入分页符) 最近做一个项目,客户要求对已经生成好的RTF文件中的内容进行分页显示,由于之前对这方面没有什么了解,后来在网上也找了相关的资料,并结合自己 ...
- python自动化之word文档
#########################docx文件############################ ''' .docx文件有很多结构,有3种不同的类型来表示 在最高一层,Docum ...
- Java文件操作系列[3]——使用jacob操作word文档
Java对word文档的操作需要通过第三方组件实现,例如jacob.iText.POI和java2word等.jacob组件的功能最强大,可以操作word,Excel等格式的文件.该组件调用的的是操作 ...
随机推荐
- 独辟蹊径:逆推Krpano切图算法,实现在浏览器切多层级瓦片图
前言 此文我首发于CSDN(所以里面的图片有它的水印) 趁着隔离梳理一下之前做的一个有用的功能:在浏览器中去切割多分辨率瓦片图 这是一个有趣的过程,跟我一起探索吧 阅读本文需具备前置知识:对krpan ...
- Taurus.MVC 微服务框架 入门开发教程:项目部署:7、微服务节点的监控与告警。
系统目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...
- python 运行错误收集
目录 global全局声明错误 global全局声明错误 SyntaxError: name 'is_login' is used prior to global declaration 解决办法:g ...
- day48-JDBC和连接池04-2
JDBC和连接池04-2 10.数据库连接池 10.5Apache-DBUtils 10.5.1resultSet问题 先分析一个问题 在之前的程序中,执行sql语句后返回的结果集存在如下问题: 关闭 ...
- jstl的使用 转发和重定向(做项目遇到的一些问题总结)
文章目录 1.jstl的使用 2.转发和重定向 3.shiro 4.spring是什么? 5.对AOP的理解 6.标签通常和标签一起使用 7.springmvc中的form表单 7.1 form标签 ...
- LcdTools如何实现PX01读取SD中BIN文件并通过端口发出去
在实际应用中我们会碰到需要下载很大容量固件,比如TP固件几百K大小BIN文件,这种情况下用LcdTools写初始化代码的方式实现就不大现实:此时我们可以通过PX01 SD来实现. 首先,把需要操作的B ...
- Linux--网络基础(概念+协议的了解+OSI七层模型,TCP/IP五层协议,网络数据传输流程)
网络的发展 网络的发展有下面几个阶段: 独立模式:计算机最开始是以单机模式被广泛使用的.每一台计算机都是独立的,之间不能够进行数据共享与通信 网络互联: 计算机之间可以链接在一起,完成数据共享,计算机 ...
- Perl读取Excel中的数据
#!usr/bin/perl -W use strict; use Spreadsheet::ParseExcel;#PERL的Spreadsheet::ParseExcel模块支持Excel的读操作 ...
- day01-Tomcat框架分析
引入课程和Maven 1.Maven maven中央仓库:Maven Repository: Search/Browse/Explore (mvnrepository.com) maven仓库是国外的 ...
- 安装harbor仓库
1.安装docker-compose curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-c ...