【问题标题】:How to remove, or change an attached template via OleAutomation如何通过 OleAutomation 删除或更改附加模板
【发布时间】:2014-09-09 13:20:47
【问题描述】:

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

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

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

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

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


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

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


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

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


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

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

  WordApp.ActiveDocument.Set_AttachedTemplate(tmplt);

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

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

【问题讨论】:

  • 您以哪种格式保存文档?如果文件扩展名是 *.doc 或 *.docx 或 *.docm 那么这是标准的 Word 文档。但是,如果您的 fie 扩展名是 *.dot 或 *.dotx 或 *.dotm ,那么您正在使用模板格式。所以是的,更改这些会导致有关更改模板的警告。因此,如果您需要从这些模板创建新文档,而不是将它们作为文件打开,请根据这些模板创建一个新文档。保存该文档应导致将其保存到 Word 文档文件而不是文档模板中。
  • WordApp.ActiveDocument.SaveAs(strPath, wdFormatDocument); 生成一个 .doc 文件。
  • 这很有趣。我以前从未见过这样的行为。您能否将此类文档的示例上传到网络上的某个位置,以便我们查看。
  • @SilverWarrior - 我已经确定了文档的相关属性是什么 - 它是“AttachedTemplate”。我还表明,将其更改为“Normal.dot”可以解决问题。我会及时通知你。

标签: delphi ms-word ole-automation


【解决方案1】:

我最终想通了。我的问题以某种方式归结为后期绑定。我发现以下代码有效

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 类型的变量,该例程开始运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 2015-12-03
    • 2022-11-02
    • 2012-03-13
    • 2013-05-27
    • 2014-08-04
    • 1970-01-01
    相关资源
    最近更新 更多