通过 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。要将超链接配置到演示文稿中的幻灯片,请设置其:
Address
属性 为空字符串(默认为空)
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 的文本框。
我在 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。要将超链接配置到演示文稿中的幻灯片,请设置其:
Address
属性 为空字符串(默认为空)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 的文本框。