如何在 OleContainer 中将超链接添加到打开的 word 文档中
how can i add hyperlink into open word document in OleContainer
我想使用 MsWord 作为我的 HTML 文档的编辑器。
我打开带有一些文件列表的花药表格。
我希望用户 select 其中一个文件
并将其作为 link 添加到打开的文档中(在用户 select 的位置)
我打开 HTML 在 olecontainer 中创建的 word 文档。
和 :
用 OleContainerFrame 做
开始
OleContainer1.CreateObjectFromFile(FileToEditName{myfile.html}, 假);
OleContainer1.AutoActivate := aaGetFocus;
OleContainer1.DoVerb(ovOpen);
OleContainer1.Run;
结束;
我如何添加此 link,如:
AddHperyLink(SomeText,TheHyperLink)....
在用户 select
的地方
假设您的表单上有一个包含 URI 的 TEdit(我使用的是 BBC 的站点)。然后下面的代码将在您的 OLEContainer 中的活动 Word 文档中为其添加一个 hyperlink:
procedure TForm1.Button1Click(Sender: TObject);
begin
OleContainer1.OleObject.ActiveDocument.Hyperlinks.Add(
Anchor := OleContainer1.OleObject.Selection.Range,
Address := Edit1.Text, // contains e.g. http://www.bbc.co.uk
TextToDisplay := 'Link'
);
end;
它的工作方式是 OleContainer1.OleObject 是对 Word.Application 的变体引用(参见 Delphi 附带的 Word2000.Pas 单元),一旦你有了这个参考您可以使用后期(或早期)绑定调用 Word 的自动化方法。
顺便说一句,OleContainer1.OleObject.ActiveDocument.Hyperlinks.Add 参数的不寻常语法是 Delphi 支持的一种特殊语法,可以在后期绑定中使用命名参数来电。
更新: 你在评论中说你已经尝试了上面的代码但是得到了错误 "Method 'Selection' not supported by automation object"。当我整理我的测试项目时,我没有在 HTML 和 MS Word 之间建立关联,所以我编写了激活 Word 所需的代码并将 HTML 文件加载到其中。我在 FormCreate 事件中这样做:
procedure TForm1.FormCreate(Sender: TObject);
var
V : OleVariant;
AFileName : String;
begin
OleContainer1.CreateObject('Word.Application', False);
OleContainer1.Run;
V := OleContainer1.OleObject;
Caption := V.Name;
V.Visible := True;
AFileName := ExtractFilePath(Application.ExeName) + 'Hello.Html';
V.Documents.Add(AFileName);
end;
请注意,这和 Button1Click 是我项目的 完整代码 ,它会按照您的要求插入 link。如果你得到不同的结果,我想那一定是因为你设置的一些细节我们读者看不到。
是的,行得通。
我没有现在我们可以使用
(Anchor := ....
);
但现在
word 删除 execet PATH 并将其更改为 'href="../../../../MzIAI/Images/2019-06/12/45545_5679.Pdf">'
并删除完整路径
我想使用 MsWord 作为我的 HTML 文档的编辑器。 我打开带有一些文件列表的花药表格。 我希望用户 select 其中一个文件 并将其作为 link 添加到打开的文档中(在用户 select 的位置)
我打开 HTML 在 olecontainer 中创建的 word 文档。 和 : 用 OleContainerFrame 做 开始 OleContainer1.CreateObjectFromFile(FileToEditName{myfile.html}, 假); OleContainer1.AutoActivate := aaGetFocus; OleContainer1.DoVerb(ovOpen); OleContainer1.Run; 结束;
我如何添加此 link,如: AddHperyLink(SomeText,TheHyperLink).... 在用户 select
的地方假设您的表单上有一个包含 URI 的 TEdit(我使用的是 BBC 的站点)。然后下面的代码将在您的 OLEContainer 中的活动 Word 文档中为其添加一个 hyperlink:
procedure TForm1.Button1Click(Sender: TObject);
begin
OleContainer1.OleObject.ActiveDocument.Hyperlinks.Add(
Anchor := OleContainer1.OleObject.Selection.Range,
Address := Edit1.Text, // contains e.g. http://www.bbc.co.uk
TextToDisplay := 'Link'
);
end;
它的工作方式是 OleContainer1.OleObject 是对 Word.Application 的变体引用(参见 Delphi 附带的 Word2000.Pas 单元),一旦你有了这个参考您可以使用后期(或早期)绑定调用 Word 的自动化方法。
顺便说一句,OleContainer1.OleObject.ActiveDocument.Hyperlinks.Add 参数的不寻常语法是 Delphi 支持的一种特殊语法,可以在后期绑定中使用命名参数来电。
更新: 你在评论中说你已经尝试了上面的代码但是得到了错误 "Method 'Selection' not supported by automation object"。当我整理我的测试项目时,我没有在 HTML 和 MS Word 之间建立关联,所以我编写了激活 Word 所需的代码并将 HTML 文件加载到其中。我在 FormCreate 事件中这样做:
procedure TForm1.FormCreate(Sender: TObject);
var
V : OleVariant;
AFileName : String;
begin
OleContainer1.CreateObject('Word.Application', False);
OleContainer1.Run;
V := OleContainer1.OleObject;
Caption := V.Name;
V.Visible := True;
AFileName := ExtractFilePath(Application.ExeName) + 'Hello.Html';
V.Documents.Add(AFileName);
end;
请注意,这和 Button1Click 是我项目的 完整代码 ,它会按照您的要求插入 link。如果你得到不同的结果,我想那一定是因为你设置的一些细节我们读者看不到。
是的,行得通。 我没有现在我们可以使用
(Anchor := ....
);
但现在 word 删除 execet PATH 并将其更改为 'href="../../../../MzIAI/Images/2019-06/12/45545_5679.Pdf">' 并删除完整路径