首页 > 编程语言 > 详细

python下win32com.client中word文档替换不能超过500字符的问题解决方案

时间:2021-06-07 12:13:25      阅读:17      评论:0      收藏:0      [点我收藏+]

  近期在写一个脚本,提示一个错误字符串参量过长”,经搜索得知word中的替换参数,英文字符不能超500,中文不能超255(不确定,没有具体测试过)。以下为几种解决方案:

1、使用书签;

2、替换的字符串进行切割后替换;

  个人认为第二种方案优于第一种,无模板限制,具体代码(python)为:

技术分享图片
 1 def Replace(self, oldStr, newStr, selection, replaceMode, Wrap_value=1):
 2 
 3         try:
 4             #word 宏中对应的脚本
 5             ‘‘‘
 6             Selection.Find.ClearFormatting
 7             Selection.Find.Replacement.ClearFormatting
 8             With Selection.Find
 9                 .Text = "xxx单位"
10                 .Replacement.Text = "广州医科大学"
11                 .Forward = True
12                 .Wrap = wdFindContinue
13                 .Format = False
14                 .MatchCase = False
15                 .MatchWholeWord = False
16                 .MatchByte = True
17                 .MatchWildcards = False
18                 .MatchSoundsLike = False
19                 .MatchAllWordForms = False
20             End With
21             Selection.Find.Execute Replace:=wdReplaceAll
22             ‘‘‘
23 
24             #设置替换
25             #execute函数格式为(FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, Wrap, Format, ReplaceText, Replace)
26             #Wrap,可以设置为WdFindWrap常量,wdFindAsk在搜索所选内容或区域后,Microsoft Word 将显示一条消息,询问是否搜索文档的其余部分。wdFindContinue当到达搜索范围的开始或结尾时,继续执行查找操作。wdFindStop如果到达了搜索范围的开始或结尾,则结束查找操作
27             #常量wdFindAsk:2, wdFindContinue:1, wdFindStop:0
28             #replace 模式为wdReplaceNone,wdReplaceOne,wdReplaceAll 对应为0,1,2
29 
30             #设置查找的文本格式为  无格式
31             selection.Find.ClearFormatting()
32             #设置替换的文本格式为  无格式
33             selection.Find.Replacement.ClearFormatting()
34             #返回Boolean,成功为True
35             #微软word中有限制,英文超过500字符,中文255汉字之后无法替换,此处应判断新旧字符,实现全部替换
36             #算法是:将新字符串切割,新子串+旧字符串 <= 250,之后多次替换
37             
38             newStrLen = len(newStr)
39             if newStrLen >250:
40                 oldStrLen = len(oldStr)
41                 #新字符串可拼接的数量 spNewStrNum
42                 spNewStrNum = 250 - oldStrLen
43                 #新字符串的可分割次数 cutNum
44                 cutNum = math.ceil(newStrLen/spNewStrNum)
45                 #通过多次替换,达到替换超过500
46                 print(分割次数为+str(cutNum))
47                 for x in range(cutNum):
48                     if x != cutNum-1:
49                         tmpStr = newStr[x*spNewStrNum:(x+1)*spNewStrNum] + oldStr
50                     else:
51                         tmpStr = newStr[x*spNewStrNum:]
52                     selection.Find.Execute(oldStr, False, False, False, False, False, True, Wrap_value, False, tmpStr, replaceMode)
53             else:
54                 selection.Find.Execute(oldStr, False, False, False, False, False, True, Wrap_value, False, newStr, replaceMode)
55 
56 
57         except Exception as e:
58             print(出错了: + str(e))
View Code

 

python下win32com.client中word文档替换不能超过500字符的问题解决方案

原文:https://www.cnblogs.com/wysec/p/14857473.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!