通过 Delphi 应用程序在 PowerPoint 幻灯片中添加链接

Adding Links in PowerPoint Slides from a Delphi Application

我在 Delphi(版本 10.3)程序中有一些代码可以打开现有的 PowerPoint 演示文稿并进行一些更新。除了我想创建一个包含指向其他幻灯片的链接的 table 内容外,我一切正常,而且我一直无法找到如何添加链接。它使用的是 PowerPoint2010 和 Office 2010 设备。

这是我的代码的简化版本:

{ Add header slide }
FinalDeck.Slides.Add(1, 2);
SlideOb := FinalDeck.Slides.Item(1);
for Index := 1 to SlideOb.Shapes.Count do
begin
  ShapeOb := SlideOb.Shapes.Item(Index);
  if (ShapeOb.HasTextFrame = msoTrue) then
  begin
    if (Index = 1) then
      Shapeob.TextFrame.TextRange.Text := 'Table of Contents';
    if (Index = 2) then
    begin
      TempSt := 'Section 1' + #13#10 + 'Section 2' + #13#10; + 'Section 3'
      ShapeOb.TextFrame.TextRange.Text := TempSt;
    end;
  end;
end;  { of: for Index }

因此,如果可能的话,我们的想法是在适当的幻灯片中添加“第 1 节”、“第 2 节”等链接。如果有 better/easier 方法,我也愿意接受不同的方法。

如果有人能指出正确的方向,我将不胜感激。

成功的关键是将文本范围逐个附加到 TextFrame 并配置它们的 hyperlinks。要将超链接配置到演示文稿中的幻灯片,请设置其:

  1. Address 属性 为空字符串(默认为空)
  2. SubAddress property to a value in format {SlideID},{SlideIndex},{SlideTitle}. See here 了解更多信息。

使用TextRange.ActionSettings.Item(ppMouseClick).Hyperlink访问文本范围的超链接。

查看此示例代码,它创建了新的演示文稿,其中包含打开的幻灯片,然后是目录幻灯片和 3 个部分的幻灯片。

procedure CreatePresentation(const FileName: string);
var
  App: PowerPointApplication;
  Presentation: PowerPointPresentation;
  SlideTOC, SlideSection: PowerPointSlide;
  FrameTOC: TextFrame;
  RangeHyperlink: TextRange;
  SectionIndex: Integer;
  SectionTitle: string;
begin
  App := CoPowerPointApplication.Create;
  try
    Presentation := App.Presentations.Add(msoFalse);
    { Insert opening slide }
    Presentation.Slides.Add(1, ppLayoutTitle).Shapes.Item(1).TextFrame.TextRange.Text := 'The Presentation';
    { Insert table of contents }
    SlideTOC := Presentation.Slides.Add(2, ppLayoutObject);
    SlideTOC.Shapes.Item(1).TextFrame.TextRange.Text := 'Table of Contents';
    FrameTOC := SlideTOC.Shapes.Item(2).TextFrame;
    { Insert section slides }
    for SectionIndex := 1 to 3 do
    begin
      SectionTitle := 'Section ' + IntToStr(SectionIndex);
      SlideSection := Presentation.Slides.Add(Presentation.Slides.Count + 1, ppLayoutObject);
      SlideSection.Shapes.Item(1).TextFrame.TextRange.Text := SectionTitle;
      RangeHyperlink := FrameTOC.TextRange.InsertAfter(SectionTitle + sLineBreak);
      RangeHyperlink.ActionSettings.Item(ppMouseClick).Hyperlink.SubAddress :=
        IntToStr(SlideSection.SlideID) + ',' + IntToStr(SlideSection.SlideIndex) + ',' + SectionTitle;
    end;
    Presentation.SaveAs(FileName, ppSaveAsPresentation, msoFalse);
    Presentation.Close;
  finally
    App.Quit;
  end;
end;

要将其应用于您的用例,您需要知道 SlideID 或目标幻灯片的索引。请注意在循环中使用 FrameTOC.TextRange.InsertAfter 将超链接附加到内容 table 的文本框。