OZ8*_*8HP 4 delphi templates ms-word edit
我需要能够从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);
Run Code Online (Sandbox Code Playgroud)
据我了解,你使用的是错误的方法.该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;
Run Code Online (Sandbox Code Playgroud)
我使用了后期绑定,因为我发现这个例子更容易.但你应该坚持早期的约束方法.您必须导航open方法需要加载参数的事实.我想你可以简单地传递EmptyParam给除第一个参数之外的所有参数.