我的公司有大量模板,用于生成客户通信。我需要修改现有的流程,以便保存生成的文件(模板+数据)的副本以供以后编辑。
我的问题是,当我打开其中一个已保存的MSWord文档,编辑然后关闭时,MSWord坚持要求对模板(在生成过程中选择的模板)进行更改。
我不确定为什么会发生这种情况,但可能是生成的文档包含对其所基于的模板的引用,但由于模板位于远程位置,MSWord正在尝试生成新的本地文件。
如果诊断正确,那么我需要一种方法从文档中删除模板引用。
如果诊断不正确,可能的解释/解决方案是什么?
我发现BOTH结果文件包含对模板的引用。
注意:Word中的手动编辑没有问题。如果我让这封信生成并从Winword保存到磁盘,我可以打开它并非常愉快地操作它。在自动化步骤的某个地方,正在创建问题。
有趣的是 - 我已将保存格式更改为'.rtf'
,问题仍然存在。
此外 - 如果我说“是”'那也没关系。要保存对模板的更改,每次打开和关闭文档时都会提示我(无论是否编辑)
我发现通过将文档保存为wdFormatXML
,我可以看到对字母模板的引用并进行编辑。如果我这样做,问题就会消失。
我现在试图通过自动化获得相同的结果,但没有成功;
WordApp.ActiveDocument.Set_AttachedTemplate(tmplt);
不适用于tmplt' Normal.dot',varNull,' c:\ progra~1 \ etc \ Simple.dotx'等等。函数调用告诉我它找不到前两个值的模板,或者只是挂起。
我回到原来的问题 - 如何清除附加的模板?
答案 0 :(得分:0)
我最终想通了。我的问题是以某种方式延迟绑定。我发现以下代码有效
var
docpath : OleVariant;
fmt : OleVariant;
tmplt : OleVariant;
WordApp : WordApplication;
WordDoc : WordDocument;
begin
docpath := SaveLoggedDocToDisk(GetCurrentFileName());
WordApp := CoWordApplication.Create;
try
fmt := EDITABLE_FORMAT;
tmplt := '';
WordDoc := WordApp.Documents.Open(docpath, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, fmt, EmptyParam, EmptyParam );
WordDoc.Set_AttachedTemplate(tmplt);
我在此代码的早期版本中遇到的问题是
WordApp.ActiveDocument.SetAttachedTemplate(tmplt);
虽然看起来相当,但表现不佳。通过创建WordDocument
类型的变量,这个例程就会栩栩如生。