如何在 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">' 并删除完整路径