近期在写一个脚本,提示一个错误“字符串参量过长”,经搜索得知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))
python下win32com.client中word文档替换不能超过500字符的问题解决方案
原文:https://www.cnblogs.com/wysec/p/14857473.html