如何绕过MS Word Search中的255 char限制;使用OLE替换

时间:2011-07-22 09:34:42

标签: delphi ms-word ole replace

我正在使用(在Delphi win32应用程序中)OLE来执行Word文档中的搜索和替换。

用户准备一个文件,其中包含一些文字标签,将其括在“{”和“}”中并保存文件。

这样的东西
  

亲爱的{NAME},

     

我想告诉你{WHAT_I_DID_LAST_WEEK}

当然NAMEWHAT_I_DID_LAST_WEEK是可以超过255的数据库字段。

所以现在通过使用搜索并用OLE替换我得到一个STRING PARAMETER TOO LONG错误(似乎255是那里可用的最长的字符串)。

有没有一种简单的方法可以摆脱这个问题?

我想到的一些自制解决方案是:

1)截断为255(好的;))可能会在末尾添加“...”

2)对于需要替换超过255个字符的每个“标记”,我可以先插入更多标记,如{WHAT_I_DID_LAST_WEEK_1}{WHAT_I_DID_LAST_WEEK_2}{WHAT_I_DID_LAST_WEEK_N},然后一次替换255个字符

(1)是一个快速的解决方案,至少用户没有收到错误,但当然不是很好

(2)可能会有效,但它是一种解决方法,我更愿意采用另一种解决方案。

可能是另一个解决方案是不使用OLE Serach& Replace但是使用另一个函数。

1 个答案:

答案 0 :(得分:5)

我们使用AWordApp.Selection.TypeText(strValue)和循环来替换值长度超过255个字符的标签......


 var
  AWordApp: OLEVariant;
 ...
 AWordApp := CreateOleObject('Word.Application');
 ...

if (Length(strValue) >  255) then
 begin
  bFound := AWordApp.Selection.Find.Execute(params...);
  while bFound do
   begin
    AWordApp.Selection.TypeText(strValue);
    bFound := AWordApp.Selection.Find.Execute(params...);
   end;
 end;

问候