Word 2010中的邮件合并功能


3

我有这个Excel文件,有多个工作表,我希望导入到Microsoft Word的信函格式。

首先,我开始邮件合并到这个excel文件并选择了这个特定的表/表,然后我用必要的字段填充了这封信并完成了。

之后,我想再次将合并邮件发送到同一个文件,但这次选择了另一个具有不同列的表,我希望用该数据填充该字母。当我试图这样做时,我收到一个错误,说我必须删除以前填充的字段并将其替换为新选择的字段。

错误消息:

此合并字段在主文档中使用,但在数据源中不存在。您可以从主文档中删除无效的合并字段。或者,您可以使用数据源中的有效合并字段替换它。

我需要的列来自Excel文件中的不同表,这就是我单独检索数据的原因。

我该如何纠正错误?

Answers:


0

多个文档的MailMerge应该有一个表,每个条目都有一行。最简单的方法是组合您的工作表,这样您就拥有一张表。使用该表填充将创建 x 文件,在哪里 x 是表中非标题行的数量。

Sample data table for multiple documents


嗨jmac,除了组合床单有一张桌子,还有其他方法吗?我知道这将是最简单的方法,但问题是我们不应该将所有的纸张组合在一起,而是将它们分开。
Cheryl

您可以重新打开单词模板文档(要合并的文档)并选择一个新表 - 只要在关闭之前不保存它,就不应该链接到excel中的上一个表。这是一个更多的手动工作(在excel中创建临时组合表然后删除它可能更容易)。
jmac

0

IMO jmac建议的方式可能是最简单和最可靠的,除非您可以访问良好的编码资源。或者接受您必须复制和修改邮件合并主文档以合并每个工作表中的数据。

还有其他方法,但大多数涉及编程或方法,我认为这些方法对于典型情况不够可靠,而另一种只能在某些情况下工作。

可以使用的还取决于您是要将来自多个工作表的所有数据组合到单个输出中,还是要将每个工作表单独输出。

如果您正在使用依赖于字段映射的ADDRESSBLOCK或GREETINGLINE字段,则事情甚至更棘手。

对于“每张纸的单独输出”,

一个。如果每个工作表使用相同的列,但名称不同,则可以使用列号而不是名称。例如,假设您的工作簿包含2张Sheet1和Sheet2,而Sheet1列1则称为namea,而Sheet2列1则称为nameb。然后(使用Alt-F9查看字段名称)您需要在邮件合并主文档中使用以下内容 对于Sheet1:

{MERGE FIELD名称}

对于Sheet2

{MERGE FIELD名称}

{MERGEFIELD 1}

应该适用于这两种情况。 (这在我所知道的任何地方都没有记录)。

湾您可以使用“地址字段”而不是“数据库字段”。这有一个限制,我通常认为这是一个showstopper(我将在后面描述),但它的工作原理如下:

不是通过{MERGEFIELD namea}使用列名(“namea”),而是使用这样的地址字段

{MERGEFIELD“名字”\ m}

这使用一组标准字段名称,您将“匹配”(或“映射”)与Excel工作表中的列名称匹配。您可以通过选择“地址”选项而不是默认的“数据库”选项从完整的“插入字段”对话框中选择这些字段,然后可以使用该对话框中的“匹配字段...”按钮重新映射字段。你需要检查一下 请记住此计算机上此组数据源的此匹配项 底部的方框。然后,当您从一个数据源切换到另一个数据源时,Word应该记住正确的映射。

这就是理论,但在实践中我认为在大多数情况下这是一种不可行的方法。这是因为Word仅记住(在Windows注册表中)每个数据库名称的一个映射。因此,如果您在一个工作表中有一个名为namea的字段,并且您需要将其映射到名字,但在另一个工作表中,您需要将namea映射到姓氏,您不能这样做(AFAICS)。更糟糕的是,如果有人更改映射,现有的合并文档最终可能会输入错误的数据,用户根本就没有警告。

涉及编程的方法包括以下内容:

C。您有代码(例如VBA代码),它在每个工作表中收集并保存您需要的名称,然后为每个MERGEFIELD字段插入正确的名称。你可以使用嵌套字段,实际上做你自己的映射。再次使用(a)中的示例,您可以使用名为“thename”的文档变量,使用VBA使用namea或nameb填充它,并使用以下嵌套字段:

{MERGEFIELD {DOCVARIABLE thename}}

(这只有在你尝试验证字段名称之前可以让你的VBA进行替换时才有效)

d。 (如果您要求在单个合并中合并所选的工作表,而不是每个工作表合并一次),您可以编写代码以自动化Excel以使用Excel对象模型合并工作表,或者您可以使用Excel(或Access)执行此操作通过设置UNION查询来组合工作表。再次使用我们的示例,UNION可能如下所示:

SELECT 1 AS [thesheet],namea AS [thename] FROM [Sheet1 $]

联盟

SELECT 2,nameb FROM [Sheet2 $]

虽然您可以在Word VBA中沿这些行设置查询,但Word在其MailMerge查询中有极限可能超过511个字符。您可以在新的Excel工作簿中设置查询以执行类似的操作,但我不知道该产品中是否存在查询长度或其他限制。此外,您可能会丢失任何“备忘录”数据(超过255个字符),因此,这只是某些类型数据源的选项。


您可以循环遍历代码以在Excel中创建邮件合并。同 objTemplate 设置为我要合并的Word文档,这里是代码: objTemplate.MailMerge.OpenDataSource Name:=(current excel file path & name), Connection:="Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=(current excel file path & name)" , SQLStatement:="SELECT * FROM `(sheet name)`"
jmac

0

您是否尝试过“选择收件人”并再次选择源表?如果没有,请执行此操作并选择正确的工作表。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.