目录
在自动化处理word时,可以使用脚本为word文档中图片和表格插入题注;也可以查找word文档中已经插入的题注,查看并修改。
1、打开word文档
import win32com.client as win32
from win32com.client import constants
import os
curr_path = os.getcwd()
doc_app = win32.gencache.EnsureDispatch('Word.Application')#打开word应用程序
doc_app.Visible =1#设置应用程序可见
doc = doc_app.Documents.Open(r'%s\批量插入题注示例文档.docx'%curr_path)#创建新得文档
word文档未插入前的状态:
插入后的效果:
2、在文档中为图片插入题注
pic_cap_label = doc_app.CaptionLabels.Add('图')
for item in doc.InlineShapes:
if(item.Type == constants.wdInlineShapePicture):
rng = item.Range
rng.InsertCaption(Label= pic_cap_label,Position=constants.wdCaptionPositionBelow,Title="咖啡杯")
Position参数决定了题注插入的位置。这里图片的题注是在下方插入的。
遍历图片的方法,对于一些文档中还包含其他的类型的InlineShape的,还需要使用Type类型过滤。其他的类型分类如下:
3、在文档中为表格插入题注
tab_cap_label = doc_app.CaptionLabels.Add('表')# 添加自定的题注
for table in doc.Tables:
rng = table.Range
rng.InsertCaption(Label= tab_cap_label,Position=constants.wdCaptionPositionAbove,Title="省份省会表")
使用for遍历所有的表,然后在表格上面插入题注。Tables只包含表格, 就没有type的判断。
4、遍历所有题注
查找题注时,我尝试过使用Find.Execute来搜索,但是没有起效。只找到一种比较笨的方法,就是遍历每一行的style。在文档中,插图的题注,整个段落的style都是统一的。
for parag in doc.Paragraphs:
# if(parag.Style==doc_app.ActiveDocument.Styles('题注')):# 这种判断条件无法起效
if(parag.Style.NameLocal =='题注'):
print(parag.Range.Text[:-1]) #去除段尾的换行符
这里在判断style时,发现使用NameLocal可以正常判断。NameLocal就是word中看到的样式名称。此外,直接使用style变量进行比较,不知道为什么无法区分开样式。
5、更新题注编号
for parag in doc.Paragraphs:
if(parag.Style.NameLocal =='题注'):
parag.Range.Fields.Update()
除了逐个段遍历,还可以直接全文整体更新。
doc.Content.Fields.Update()
标签:题注,word,python,doc,插入,文档,parag
From: https://blog.csdn.net/flashman911/article/details/143067790