检查 Word.Document 是否为 mailmerge,如果是,请删除 mailmerge

Check that a Word.Document is a mailmerge and remove mailmerge if so

提问人:DinahMoeHumm 提问时间:11/9/2023 更新时间:11/9/2023 访问量:56

问:

我们在打开已配置为“邮件合并”的 Word 文档时遇到了一个奇怪的问题。

当您手动打开文档时,即只需在计算机上双击它,它就会显示一个消息框:

"打开此文档将运行以下 SQL 命令:

SELECT * FROM(此处为一些文件名)

数据库中的数据将放置在文档中。是否要继续?"

单击“否”后,您可以转到“邮件”功能区,“开始邮件合并”并选择“普通Word文档”。如果您随后保存文档,所有这些邮件合并内容都会消失,并且当您打开文档时,您将不再收到该消息。

现在是我们的应用程序。我们只需从 Word.Documents 对象打开 Document:

oWDoc = oWDocs.Open(FileName:=sFile)

现在。。。

我录制了一个宏,看看当我们执行这些操作时发生了什么,它记录的只是:

oWDoc.MailMerge.MainDocumentType = -1

但是当我单步执行我的代码时,在它按照第一个代码片段打开文档之后,当我在执行该语句之前检查 MainDocumentType 时,它已经是 -1 (wdNotAMergeDocument),如果我随后遵循

oWDoc.Save()

...这没什么区别。如果我随后尝试通过双击文档手动打开它,我仍然会收到该消息,我仍然需要通过动作将其删除。

我录制了另一个宏,以查看文档的打开方式是否有任何不同,但 Documents.Open 调用似乎传递了所有默认值,因此我认为它应该与我们以编程方式打开它的方式相同。

我的问题

我怎样才能:

  1. 以编程方式检查并
  2. 以编程方式删除它,以便即使用户随后手动打开文档,它也会真正消失?

我们的代码是用 VB 编写的,但欢迎用 C# 编写答案

C# vb.net MS-Word 办公自动化

评论

2赞 dbasnett 11/9/2023
在保存文档之前,可能需要执行此操作, ActiveDocument.MailMerge.MainDocumentType = wdNotAMergeDocument 。你试过吗.保存为2。
1赞 jonsson 11/9/2023
如果 @dbasnett 的建议还不够,也许可以尝试 oWDoc.Saved = False(尝试“弄脏”文档,以便在调用 Save 方法时,Word 实际上会执行某些操作)。因为在其他情况下,Word 的对象模型不会注意到您更改了某些内容。未经测试。
1赞 macropod 11/9/2023
在 VBA 中,打开文档时将使用 wdApp.DisplayAlerts = wdAlertsNone,其中 wdApp 是 Word 应用程序。请参阅从 Excel 运行邮件合并,将输出发送到单个文件,网址为: msofficeforums.com/mail-merge/21803-mailmerge-tips-tricks.html
0赞 DinahMoeHumm 11/10/2023
大家好,感谢您的建议;对不起,我被一些完全不相关的事情所困扰,但我希望今天能试一试。
1赞 DinahMoeHumm 11/12/2023
这就是我们所做的。我们的“模板”是.docx文档。然后我们从中生成新的 Word 文档。当用户从我们的应用程序中打开这些生成的文档时,我们使用文字自动化来打开文档。wdAlertsNone 是默认值,因此不显示任何错误。一切都很好,你会想,但不是。我们收到了投诉“YoUr GeNeRaTeD dOcS tAkE 30 SeCoNdS tO cLoSe, yOuR sOfTwArE iS cRaP”......我们花了很长时间才发现他们已经导入了 MailMerge 文档......

答: 暂无答案