gpt4 book ai didi

delphi - 如何通过 OleAutomation 删除或更改附加模板

转载 作者:行者123 更新时间:2023-12-02 19:48:18 25 4
gpt4 key购买 nike

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

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

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

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

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

<小时/>

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

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

<小时/>

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

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

<小时/>

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

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

  WordApp.ActiveDocument.Set_AttachedTemplate(tmplt);

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

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

最佳答案

我终于明白了。我的问题在某种程度上归因于后期绑定(bind)。我发现以下代码有效

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 类型的变量,例程开始变得生动起来。

关于delphi - 如何通过 OleAutomation 删除或更改附加模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25745735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com