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个字符),因此,这只是某些类型数据源的选项。