Delphi 到 PPT - 如何复制然后移动幻灯片

Delphi to PPT- How to Copy then Move a Slide

Delphi RIO - 我正在使用Delphi来控制PPT。我需要将给定的幻灯片复制到 PPT 平台的末尾,然后对其进行更改。我通过 slide.DUPLICATE 方法复制我的幻灯片。这会在源幻灯片之后创建幻灯片的副本。我找到了 MoveTo method,但它似乎不是 Delphi 中的有效方法。我的 USES 子句中有 Office_TLB, MSPpt2000。我试图为 PPT 导入一个更新的 TYPE 库,但似乎确实有一个。 (尝试的方法:来自 Delphi/Component/Import Component/Type Library。)如何移动幻灯片(或幻灯片范围对象,因为这是 DUPLICATE 命令 returns)的末尾甲板?这是我当前的代码。这里一切正常...我只是没有移动操作...

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;

Delphi 附带多个 MS Office 类型库(位于 Delphi 安装目录的 OCX\Servers 中)以支持 legacy MS Office versions。 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 and Paste:

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

方法 Slides.Paste 获取粘贴剪贴板内容的幻灯片索引(从 1 开始)。为方便起见,您可以使用-1作为索引,将内容粘贴在末尾。

lDestSlideRange.Cut;
lDeck.Slides.Paste(-1);