我如何在OleContainer中将超链接添加到打开的Word文档中

时间:2019-08-07 19:11:30

标签: delphi hyperlink containers ole

我想使用MsWord作为HTML文档的编辑器。 我用其他文件列表打开花药表格。 我希望用户选择其中一个文件 并将其作为链接添加到打开的文档中(在用户选择的位置)

我用olecontainer中创建的单词打开HTML文档。 与:       用OleContainerFrame做       开始         OleContainer1.CreateObjectFromFile(FileToEditName {myfile.html},False);         OleContainer1.AutoActivate:= aaGetFocus;         OleContainer1.DoVerb(ovOpen);         OleContainer1.Run;       结束;

我如何添加此链接,如: AddHperyLink(SomeText,TheHyperLink).... 在用户选择的地方

2 个答案:

答案 0 :(得分:1)

假设您的表单上有一个包含URI的TEdit(我使用了BBC的网站)。然后,以下代码将在您的OLEContainer的活动Word文档中向其添加超链接:

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支持的一种特殊语法,可以使命名参数用于后期调用。

更新:您在注释中说,您已经尝试了上面的代码,但收到错误“自动化对象不支持方法'选择'”。当我组合测试项目时,我没有在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是我项目的整个代码,它会按您的要求插入链接。如果您得到不同的结果,我认为这一定是由于您的设置的某些细节使我们的读者看不到。

答案 1 :(得分:0)

是可行的。 我现在不可以使用

(Anchor := .... );

但是现在 word删除execet路径并将其更改为'href =“ ../../../../ MzIAI / Images / 2019-06 / 12 / 45545_5679.Pdf”>' 并删除完整路径