Delphi to PPT - как скопировать, а затем переместить слайд - PullRequest
0 голосов
/ 26 июня 2019

Delphi RIO - я использую Delphi для управления PPT. Мне нужно скопировать данный слайд в КОНЕЦ колоды PPT, а затем внести в него изменения. Я копирую свой слайд с помощью метода slide.DUPLICATE. Это создает копию слайда после исходного слайда. Я нашел метод MoveTo , но он не является допустимым методом в Delphi. У меня есть Office_TLB, MSPpt2000 в моем предложении USES. Я попытался импортировать более новую библиотеку TYPE для PPT, но, похоже, она есть. (Попытка метода: из Delphi / Component / Import Component / Type Library.) Как мне переместить слайд (или объект диапазона слайдов, поскольку именно это возвращает команда DUPLICATE) в конец колоды? Вот мой текущий код. Здесь все работает ... У меня просто нет операции Move ...

procedure CopySlide;
var
  lDeck: PowerPointPresentation;
  lApplication: PowerPointApplication;
  lSourceSlide : PowerPointSlide;
  lDestSlideRange: SlideRange;

  begin
    lApplication := CoPowerPointApplication.Create;

    // Open the PPT Deck
   lDeck := lApplication.Presentations.Open('D:\testppt.pptx', msoFalse, msoFalse, msoTrue);
   lSourceSlide := lDeck.Slides.Item(4);

   // Copy the slide.  Duplicate returns a SlideRange, not a slide object
   lDestSlideRange := lSourceSlide.Duplicate;

   // Move the slide to the end of the deck
   // ?????
  end;

1 Ответ

1 голос
/ 27 июня 2019

Delphi поставляется с несколькими библиотеками типов MS Office (находится в OCX\Servers в каталоге установки Delphi) для поддержки устаревших версий MS Office . Библиотеки типов для PowerPoint:

  • MSPpt2000.pas - Office 2000 (9,0)
  • PowerPointXP.pas - Office XP (10.0)
  • PowerPoint2010.pas - Office 2010 (14,0)

Вы выбрали самый старый, который не поддерживает метод.

Вариант 1

Выберите более новую версию - как минимум Office XP (10.0). Это также означает отказ от поддержки Office 2000. Тогда вы сможете использовать метод MoveTo:

lDestSlideRange.MoveTo(lDeck.Slides.Count);

Вариант 2

Эмуляция. Переместить в с помощью Cut и Paste:

lDestSlideRange.Cut;
lDeck.Slides.Paste(lDeck.Slides.Count + 1);

Метод Slides.Paste принимает индекс слайда (на основе 1), перед которым вставляется содержимое буфера обмена. Для удобства вы можете использовать -1 в качестве индекса для вставки содержимого в конце.

lDestSlideRange.Cut;
lDeck.Slides.Paste(-1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...