4

我需要能够从 Delphi 打开和编辑 Word 模板(使用 Word) 我可以打开模板 OK 但 Word 假定它是文档而不是模板。

问题是我需要编辑模板而不是将其用作新文档的模板。我将模板用作文档处理系统的一部分,并且我希望用户能够从我的应用程序中编辑模板。因为现在他们必须打开 Word,然后从那里打开模板并进行编辑——从我的应用程序中进行操作会更容易、更安全。

实验代码

fWordApp: WordApplication;
TempName: OleVariant;
WordDoc: WordDocument;
TemplateFile: string;
begin
  TemplateFile := Settings.Directories.RootInsert(qryTemplates.FieldByName('fldtemplate_path').AsString);
  if TemplateFile <> '' then
    begin
      if not Assigned(fWordApp) then
        begin
          fWordApp := CreateOleObject('Word.Application') as WordApplication;
          while fWordApp.Templates.Count = 0 do
            Sleep(200);                                 // Normal.dot must be loaded
        end;
      if Assigned(fWordApp) then
        fWordApp.Visible := True
      else
        raise Exception.Create('Cannot initialize Word application');
      TempName := TemplateFile;
      WordDoc := fWordApp.Documents.Add(TempName, EmptyParam, wdFormatTemplate, EmptyParam);
4

2 回答 2

7

据我了解,您使用了错误的方法。该Add方法用于创建新文档。您可以传递模板文件名以使新文档基于该模板。

但是您想打开现有文档并对其进行编辑。文档是模板并不重要。你仍然需要打开它。为此,您需要该Open方法。这是一个相当琐碎的例子。

var
  WordApp, Doc: Variant;
begin
  WordApp := CreateOleObject('Word.Application');
  WordApp.Visible := True;
  Doc := WordApp.Documents.Open('path\to\my\template.dotx');
  Doc.Range.Text := 'Merry Christmas everyone';
  Doc.Save;
  WordApp.Quit;
end;

我使用了后期绑定,因为我发现这个例子更容易。但是你应该坚持你的早期绑定方法。您必须了解 open 方法需要大量参数这一事实。我认为您可以简单地传递EmptyParam给除第一个参数之外的所有参数。

于 2012-12-23T15:27:44.823 回答
3

这里有数以千计的 Delphi 函数可用于 Word: http ://delphimagic.blogspot.com.es/2013/03/funciones-para-trabajar-con-word.html

于 2013-04-13T12:38:40.267 回答