首页>>后端>>Python->python

python

时间:2023-12-14 本站 点击:0

导读:今天首席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多少列的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Python/33471.html