2

我的公司有大量用于生成客户通信的模板。我需要修改现有流程,以便保存生成的文件(模板 + 数据)的副本以供以后编辑。

我的问题是,当我打开这些保存的 MSWord 文档之一,编辑,然后关闭时,MSWord 坚持对模板(在生成过程中选择的模板)进行了更改。

我不确定为什么会发生这种情况,但可能是生成的文档包含对其所基于的模板的引用,但由于模板位于远程位置,MSWord 正在尝试生成新的本地文件.

如果该诊断是正确的,那么我需要一种从文档中删除模板引用的方法。

如果诊断不正确,那么可能的解释/解决方案是什么?


我发现这两个结果文件都包含对模板的引用。

注意:在 Word 中手动编辑没有问题。如果我让字母从 Winword 生成并保存到磁盘,我可以打开它并非常愉快地操作它。在自动化步骤的某个地方,问题正在产生。


有趣的是 - 我已将保存格式更改为'.rtf',但问题仍然存在。

此外 - 如果我说“是”以保存对模板的更改并不重要,它会在我每次打开和关闭文档时继续提示我(无论我是否编辑)


我发现通过保存文档,wdFormatXML我可以看到对信函模板的引用并对其进行编辑。如果我这样做,问题就会消失。

我现在正试图通过自动化实现相同的结果,但没有成功;

  WordApp.ActiveDocument.Set_AttachedTemplate(tmplt);

不适用于 tmplt 'Normal.dot'、varNull、'c:\progra~1\etc\Simple.dotx' 等值。函数调用告诉我它找不到前 2 个值的模板,或者只是挂起。

我回到我最初的问题 - 如何清除附加的模板?

4

1 回答 1

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的变量,例程开始生效。

于 2014-09-10T18:03:53.080 回答