• Alex_Y (14.05.18 10:50) [0]
    Здравствуйте.

    Пытаюсь сохранить страницы документа Word в jpeg. Во всех версиях ворда работает без проблем. В версии 2016 выдает ошибку "Запрашиваемый номер семейства не существует". Подскажите в чем может быть проблема?

    Код:

       // Открытие документа Word
       v := CreateOLEObject('Word.Application');
       v.Documents.Open(FileName := XMLFile, ReadOnly := True);
       iPages := v.ActiveDocument.ActiveWindow.Panes.Item(1).Pages;
       cnt := iPages.Count;
       for i := 1 to cnt do
       begin
         // Вот тут происходит ошибка "Запрашиваемый номер семейства не существует"
         Pg := iPages.Item(i);
         Bytes := Pg.EnhMetaFileBits;
    ...
       end;

  • Raisa © (15.05.18 10:16) [1]
    iPages - это массив?
    Item начинается с 1, а не с 0 ?

    P.S. C Word-ом работала, но конкретно такого, что описано в вопросе, не делала.
  • Alex_Y (15.05.18 15:23) [2]
    iPages это Variant, полученный от OLE метода.
    А где вы увидели, что у меня Item начинается с 0?
  • Alex_Y (15.05.18 15:25) [3]
    У OLE ворда все массивы начинаются с 1.
  • ку ку (15.05.18 16:17) [4]
    for i := 1 to cnt do
      try
        Pg := iPages.Item(i);
        Bytes := Pg.EnhMetaFileBits;
      except
       ShowMessage(IntToStr(i) + " " + inttostr(iPages.Count));
      end;
  • Alex_Y (16.05.18 10:10) [5]
    Что мне это даст?
    Я и так знаю по отладке, что i у меня = 1, а iPages.Count = 4.
  • ку ку (16.05.18 10:34) [6]
    ошибка говорит, что идет обращение к элементу коллекции, которого нет в момент обращения к ней.

    я этой ошибке верю.
    и первое что бы я сделал - это проверил бы реальный размер коллекции в момент когда ошибка возникла.
  • Alex_Y (16.05.18 10:45) [7]
    Не убедил, но я проверил. Результат как и в отладчике, выдает "1 4".
    Повторюсь, данный код прекрасно работает в любом другом офисе, кроме 2016.
    Возможно в нем как-то объектная модель отличается, вот только как это узнать...
Есть новые Нет новых   [93030   +19][b:0.001][p:0.003]