从Delphi打开并编辑Word模板

从Delphi打开并编辑Word模板,delphi,templates,ms-word,edit,Delphi,Templates,Ms Word,Edit,我需要能够从Delphi(使用Word)打开和编辑Word模板 我可以打开模板,但Word假定它是文档而不是模板 问题是我需要编辑模板,而不是将其用作新文档的模板。 我将模板用作文档处理系统的一部分,我希望用户能够从我的应用程序中编辑模板。现在,他们必须打开Word,然后从那里打开模板并进行编辑——从我的应用程序中进行编辑将更容易、更安全 实验代码 fWordApp: WordApplication; TempName: OleVariant; WordDoc: WordDocument; Te

我需要能够从Delphi(使用Word)打开和编辑Word模板 我可以打开模板,但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);
fWordApp:WordApplication;
TempName:OleVariant;
WordDoc:WordDocument;
模板文件:字符串;
开始
TemplateFile:=Settings.Directories.RootInsert(qryTemplates.FieldByName('fldtemplate_path').AsString);
如果模板文件为“”,则
开始
如果未分配(fWordApp),则
开始
fWordApp:=CreateOleObject('Word.Application')作为WordApplication;
而fWordApp.Templates.Count=0 do
睡眠(200);//必须加载Normal.dot
结束;
如果已分配(fWordApp),则
fWordApp.Visible:=真
其他的
引发异常。创建('无法初始化Word应用程序');
TempName:=模板文件;
WordDoc:=fWordApp.Documents.Add(TempName,EmptyParam,wdFormatTemplate,EmptyParam);

据我所知,您使用了错误的方法。
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
传递给除第一个参数以外的所有参数即可。

这里有数千个Delphi函数可用于Word:

我不明白。你能详细说明一下吗,最好是用代码。Word模板和Word文档一样。区别只是扩展名,因此与Word/Shell的行为不同-双击模板文件将创建基于模板的新文档那么解决方案是什么样的呢?