python-docx多少列

如题所述

第1个回答  2024-09-19

导读:今天首席CTO笔记来给各位分享关于python-docx多少列的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

PythonWord文档处理上篇: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关键字发现在一个mergerequest上已经给出了添加批注的解决方案,可以通过paragraph对象上的add_comment方法给一个段落添加批注

但这还是不符合我的需求,我的目标是精准添加到某个词或者短语上

打开这个贡献者的源码进行研究

其实就是在P标签内插入comment标签引用,同时添加comment标签到xx文件

同理我们可以在r标签内插入comment标签引用,同时添加comment标签到xx文件,这样就能实现给特定词添加批注的需求了

pythondocx使用总结

本文将总结之前在使用python-docx包处理word文档时的一些理解与经验。

安装

引入

python-docx将整个文章看做是一个Document对象官方文档-Document,其基本结构如下:

在python-docx中,run是最基本的单位,每个run对象内的文本样式都是一致的,也就是说,在从docx文件生成文档对象时,python-docx会根据样式的变化来将文本切分为一个个的Run对象。

你也可以通过它来处理表格官方文档-表格,基本结构如下:

python-docx怎么给表格自定义样式

1、word表格样式的设置

fromdocximport*

document=Document()

table=document.add_table(3,3,style="MediumGrid1Accent1")

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表格样式

fromdocx.enum.styleimportWD_STYLE_TYPE

fromdocximport*

document=Document()

styles=document.styles

#生成所有表样式

forsinstyles:

ifs.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,命令为pipinstallpython-docx。

python-docx使用Document对象来表示整个docx文档。其内部包含一个Paragraph对象列表。每个Paragraph对应docx文档的一个段落。

word文档中除了字符串,还包含字体、大小、颜色等样式信息。相同样式的连续字符串,就会被保存在一个Run对象中。

假设docx文档中有下面这些内容:

那么经过python-docx解析,就会生成3个Run对象:

python设置word文档格式内容

importdocx

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="MediumGrid1Accent1")

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

logo设计

创造品牌价值

¥500元起

APP开发

量身定制,源码交付

¥2000元起

商标注册

一个好品牌从商标开始

¥1480元起

公司注册

注册公司全程代办

¥0元起

    官方电话官方服务
      官方网站八戒财税知识产权八戒服务商企业需求数字市场
相似回答
大家正在搜