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

时间:2019-06-26 13:07:40

标签: delphi com powerpoint

Delphi RIO-我正在使用Delphi来控制PPT。我需要将给定的幻灯片复制到PPT卡座的END,然后对其进行更改。我通过slide.DUPLICATE方法复制幻灯片。这将在源幻灯片之后创建幻灯片的副本。我已经找到了MoveTo method,但是在Delphi中它似乎不是有效的方法。我的USES子句中有Office_TLB,MSPpt2000。我试图为PPT导入一个较新的TYPE库,但确实有一个。 (尝试的方法:来自Delphi /组件/导入组件/类型库。)如何将幻灯片(或幻灯片范围对象,因为这是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 个答案:

答案 0 :(得分:1)

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

使用CutPaste模拟移动到:

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

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

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