2012-12-23 50 views
4

我需要能够打开和编辑Delphi中的Word模板(使用Word) 我可以打开模板,但是Word会假定它是文档而不是模板。打开并编辑Delphi中的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); 
+2

我不明白。你能否详细说明,最好是用代码。 –

+0

Word模板也是Word文档。差异只是扩展,因此与Word/Shell不同的行为 - 双击模板文件将创建一个基于模板的新文档 –

回答

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传递给第一个参数。

+0

我现在得到它的帮助下工作。 – OZ8HP