Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Word: поиск и замена везде / 7 сообщений из 7, страница 1 из 1
17.10.2018, 14:03
    #39718786
shmelina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Word: поиск и замена везде
На VBA есть код, который ищет и заменяет текст везде, в т.ч. и в колонтитулах.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub FindAndReplaceFirstStoryOfEachType()
  Dim rngStory As Range
  For Each rngStory In ActiveDocument.StoryRanges
    With rngStory.Find
      .Text = "раз"
      .Replacement.Text = "два"
      .Wrap = wdFindContinue
      .Execute Replace:=wdReplaceAll
    End With
  Next rngStory
End Sub


Пытаюсь перевести его на Delphi, но получаю ошибку "Запрашиваемый номер семейства не существует".
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var
  I: Integer;
  Range: Variant;
begin
  for I := 1 to Doc.StoryRanges.Count do
  begin
    Range := Doc.StoryRanges.Item(I); // Ошибка здесь при I = 2
    Range.Find.Execute(
      FindText := 'раз',
      ReplaceWith := 'два',
      Replace := wdReplaceAll);
  end;
end;


Прошу помощи.
...
Рейтинг: 0 / 0
17.10.2018, 14:09
    #39718791
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Word: поиск и замена везде
for I := 0 to Doc.StoryRanges.Count - 1 do ...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17.10.2018, 15:01
    #39718836
shmelina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Word: поиск и замена везде
Мимопроходящийfor I := 0 to Doc.StoryRanges.Count - 1 do ...Тогда спотыкается при I = 0. По справке смотрел, в VBA коллекции с 1 начинаются.
...
Рейтинг: 0 / 0
17.10.2018, 15:44
    #39718883
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Word: поиск и замена везде
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
type
  IEnumVARIANT2 = interface(IUnknown)
    ['{00020404-0000-0000-C000-000000000046}']
    function Next(celt: LongWord; out rgvar : OleVariant;
      out pceltFetched: LongWord): HResult; stdcall;
    function Skip(celt: LongWord): HResult; stdcall;
    function Reset: HResult; stdcall;
    function Clone(out Enum: IEnumVARIANT): HResult; stdcall;
  end;

var
  LEnum: IEnumVARIANT2;
  Range: OleVariant;
  LFetched: Cardinal;
begin
  LEnum := ActiveDocument.StoryRanges as IEnumVARIANT2;
  while LEnum.Next(1, Range, LFetched) = S_OK do begin
    Range.Find.Execute(
      FindText := 'раз',
      ReplaceWith := 'два',
      Replace := wdReplaceAll);
  end;
end;

IEnumVARIANT2 я переопределяю, потому, что в делфевском импорте IEnumVARIANT ошибка
...
Рейтинг: 0 / 0
17.10.2018, 17:25
    #39719004
shmelina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Word: поиск и замена везде
_Vasilisk_
Код: pascal
1.
LEnum := ActiveDocument.StoryRanges as IEnumVARIANT2;


Здесь ошибку выдает при компиляции: E2015 Operator not applicable to this operand type
...
Рейтинг: 0 / 0
17.10.2018, 18:01
    #39719030
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Word: поиск и замена везде
shmelinaOperator not applicable to this operand type
Код: pascal
1.
2.
3.
4.
5.
6.
var
  LDisp: IDispatch;
begin
  LDisp := ActiveDocument.StoryRanges;
  LEnum := LDisp as IEnumVARIANT2;
  .............

или
Код: pascal
1.
2.
if not VarSupports(ActiveDocument.StoryRanges, IEnumVARIANT2, LEnum) then
  OleError(E_NOINTERFACE);
...
Рейтинг: 0 / 0
17.10.2018, 18:16
    #39719036
shmelina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Word: поиск и замена везде
_Vasilisk_
Код: pascal
1.
LEnum := LDisp as IEnumVARIANT2;

При выполнении тут ошибка: Exception class EIntfCastError with message 'Interface not supported'.
Спасибо за помощь. Решил отложить этот вопрос до лучших времен.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Word: поиск и замена везде / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]