目录
1、读取编号
读取示例
如何判断段落是否有自动编号呢?
如何区分不同的类型编号呢?
2、添加自动编号
有的时候需要提取word中带自动编号的信息。对于word中的文字很多第三方的库都可以搞定,但是,提取格式,可能还是要用pywin32来搞定。
首先,需要知道自动编号的对象名称,即ListFormat。
注意区分一下ListFormat的2个属性:ListString和ListValue。看名字,感觉有点相似。
访问listformat的ListString,能获取到编号的字符串,即你看到word文档中编号的字符串,例如“1)”
而,ListValue,则读取到的是编号的值,例如文档中“5)”的编号,读取到的是5。
具体用哪个,就看个人需求。
1、读取编号
读取示例
示例文档内容,其中包含带编号的段落以及普通文本:
读取的效果:
可以看到正文行打印的结果为空字符串。
脚本:
import win32com.client as win32
from win32com.client import constants
import os
curr_path = os.getcwd()
path = r'%s\带编号.docx'%curr_path
doc_app = win32.gencache.EnsureDispatch('Word.Application')#打开word应用程序
doc_app.Visible =1#设置应用程序可见
doc = doc_app.Documents.Open(path, ReadOnly=True)#打开文档
parags = doc.Paragraphs
for parg in parags:
print(parg.Range.ListFormat.ListString)
如何判断段落是否有自动编号呢?
如果没有编号,则ListString返回的是空字符,即“”。
如何区分不同的类型编号呢?
可以使用属性ListType,不同的类型,返回值会不同。
对于使用pywin32库,最多的问题是,不知道word中,要操作的对象是什么名字,这个可以开启word的开发模式,录制一个宏。开启录制后,鼠标点击你要处理的对象,然后保存,就能看到vba代码了,然后看看里面用到什么对象,就可以很方便的查阅资料,搞定它了。
2、添加自动编号
还是以类似的文档为示例,先准备一个没有编号的文档。用脚本为其添加编号
import win32com.client as win32
from win32com.client import constants
import os
doc_app = win32.gencache.EnsureDispatch('Word.Application')#打开word应用程序
doc_app.Visible = True
current_path = os.getcwd()
doc = doc_app.Documents.Open(current_path+r"\不带编号.docx")
ListGalleries = doc_app.ListGalleries
template = ListGalleries(constants.wdNumberGallery)
for parag in doc.Paragraphs:
rng = parag.Range
rng.ListFormat.ApplyListTemplate(ListTemplate=template.ListTemplates(1))
ListGalleries可以选择三种类型:
分别对应word中的这三种:
ListTemplates(1)指向的是编号列表中的第一种样式,与word程序中列表样式的排序一致。
示例中的运行效果: