Как обойти ограничение в 255 символов в MSWord Search & Replace с помощью OLE - PullRequest
1 голос
/ 22 июля 2011

Я использую (в приложении Delphi win32) OLE для выполнения поиска и замены в документах Word.

Пользователь готовит файл с некоторыми текстовыми тегами, заключая их в "{" и "}", и сохраняетфайл.

Что-то вроде

Уважаемый {NAME},

Я хочу сказать вам {WHAT_I_DID_LAST_WEEK}

КонечноNAME и WHAT_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 Ответ

5 голосов
/ 22 июля 2011

мы используем 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;

regards

...