导读:今天首席CTO笔记来给各位分享关于python-docx多少列的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
Python Word文档处理 上篇:python-docx
某天我收到一个需求:希望能够用python对word文档进行一些处理,比如更换一些文字以及添加批注。
简单搜索后,我发现 python-docx 是一个处理docx文档的常用python库,因此我打算用它来进行进一步开发。
官方文档 提供了一个简单的示例
python-docx 将文档抽象为document对象、paragraph对象以及run对象,提供了围绕这些对象进行简单处理的API
然而在文档中并没有出现关于批注操作的部分,我在搜寻 一些文章 后发现了在某个 issue 中提及了添加批注相关信息,然而还是没有得到具体的解决办法
docx文档底层是由XML文件组成的
我们可以将一个 xx.docx 文件的后缀名改为 .rar 然后将其手动解压,可以得到下面这些文件
在诸多文件当中主要用到的是 document.xml 文件,这里保存了文档的内容
打开一份 document.xml 文件,抛开header、footer、table以及其他特殊项,去掉样式等修饰项,一份朴素的docx文档主要可以分为三个部分:paragraph、run、text
paragraph即段落,就是我们在word当中看到的一段。text即文本,就是真实的内容。run比较抽象,我们可以将其理解为片段,即语句的切分。
为了更好地理解run是什么,打开一篇word文档定位其中一句话
让我们看看这篇文档解压之后的 document.xml 文件中对应的部分
OK,我们可以看到原本完整的一句话在word中被拆分成了许多个 w:r 标签,这就是 run ,word切分 run 的规则很多,有的根据标点符号,有的根据中文分词,句子中如果存在不同样式的字词也会单独切分出来,因此我们很难预估一句话究竟会被分成几个片段。
在issue中搜索comment关键字发现在一个 merge request 上已经给出了添加批注的解决方案,可以通过 paragraph 对象上的 add_comment 方法给一个段落添加批注
但这还是不符合我的需求,我的目标是精准添加到某个词或者短语上
打开 这个贡献者的源码 进行研究
其实就是在P标签内插入comment标签引用,同时添加comment标签到xx文件
同理我们可以在r标签内插入comment标签引用,同时添加comment标签到xx文件,这样就能实现给特定词添加批注的需求了
python docx 使用总结
本文将总结之前在使用 python-docx 包处理 word 文档时的一些理解与经验。
安装
引入
python-docx 将整个文章看做是一个 Document 对象 官方文档 - Document ,其基本结构如下:
在 python-docx 中, run 是最基本的单位,每个 run 对象内的文本样式都是一致的,也就是说,在从 docx 文件生成文档对象时, python-docx 会根据样式的变化来将文本切分为一个个的 Run 对象。
你也可以通过它来处理表格 官方文档 - 表格 ,基本结构如下:
python-docx怎么给表格自定义样式
1、word表格样式的设置
from docx import *
document = Document()
table = document.add_table(3, 3, style="Medium Grid 1 Accent 1")
heading_cells = table.rows[0].cells
heading_cells[0].text = '第一列内容'
heading_cells[1].text = '第二列内容'
heading_cells[2].text = '第三列内容'
document.save(r"d:\demo.docx")
2、获取所有word表格样式
from docx.enum.style import WD_STYLE_TYPE
from docx import *
document = Document()
styles = document.styles
#生成所有表样式
for s in styles:
if s.type == WD_STYLE_TYPE.TABLE:
document.add_paragraph("表格样式 : "+ s.name)
table = document.add_table(3,3, style = s)
heading_cells = table.rows[0].cells
heading_cells[0].text = '第一列内容'
heading_cells[1].text = '第二列内容'
heading_cells[2].text = '第三列内容'
document.add_paragraph("\n")
说说 python-docx 解析 word 文档的原理
首先通过 pip 安装 python-docx,命令为 pip install python-docx 。
python-docx 使用 Document 对象来表示整个 docx 文档。其内部包含 一个Paragraph 对象列表。每个 Paragraph 对应 docx 文档的一个段落。
word 文档中除了字符串,还包含字体、大小、颜色等样式信息。相同样式的连续字符串,就会被保存在一个 Run 对象中。
假设 docx 文档中有下面这些内容:
那么经过 python-docx 解析,就会生成 3 个 Run 对象:
python设置word文档格式内容
import docx
doc=docx.Document()
整数 0 表示标题是 Title 样式,这用于文档的顶部。整数 1 到 45是不同的标题层次,是主要的标题, 45是最低层的子标题。
doc.add_heading('标题0',0)
doc.add_heading('标题1',1)
doc.add_heading('标题2',2)
doc.add_heading('标题3',3)
doc.add_heading('标题4',4)
doc.add_heading('标题5',5)
doc.save('example3.docx')
1# 添加内容
paragraph = doc_.add_paragraph()
run_ = paragraph.add_run("Python 博客")
2# 获取字体对象
font_ = run_.font
3# 设置下划线
font_.underline = True
4# 设置加粗
font_.bold = True
5# 设置字体颜色
font_.color.rgb = RGBColor(0xFF,0x00,0x00)
6# 设置字体大小
font_.size = Pt(20)
7# 获取段落格式
paragraph_format = paragraph.paragraph_format
8# 设置首行缩进
paragraph_format.first_line_indent = Inches(0.2)
9# 设置段前距,单位为英镑
paragraph_format.space_after = Pt(10)
10# 设置段后距,单位为英镑
paragraph_format.space_before = Pt(5)
11# 添加表格
table_ = doc_.add_table(rows=2, cols=2, style="Medium Grid 1 Accent 1")
12# 填写第一行第一列内容
table_.cell(0,0).text ="
13# 填写第一行第二列内容
table_.cell(0,1).text =""
14# 填写第二行第一列内容
table_.cell(1,0).text ="描述"
15# 填写第二行第二列内容
table_.cell(1,1).text =""
16# 添加图片、width 属性设置大小
doc_.add_picture(r"/usr/load/download/test.png", width=Inches(4.25))
17# 保存文档
doc_.save('Python--Word 内容格式.docx')
结语:以上就是首席CTO笔记为大家介绍的关于python-docx多少列的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。