将多行邮件合并到一个文档中

将多行邮件合并到一个文档中

我有一个 Excel 文件,每列有不同的字段:

字段 1__ | 字段 2__ | 等
F1 项目 1 | F2 项目 1 | 等
F1 项目 2 | F2 项目 2 | 等

每个字段包含的项目数量不同。

我想创建一个 Word 2010 文档,将每个字段中的所有项目列在一个文档中,而不是为每个记录拆分成多个文档。因此,最终的 Word 文档如下所示:

字段 1
__ F1 项目 1
__ F1 项目 2

字段 2
__ F2 项目 1
__ F2 项目 2
__ F2 项目 3

“字段 1”和“字段 2”标签不需要邮件合并字段,但字段下的所有项目都需要邮件合并才能显示在一个文档中。这可以做到吗?有什么想法或资源可以实现这一点吗?

答案1

我会使用 SQL Server Reporting Services 等查询和报告工具来实现这一点。您可以通过 ODBC 将其连接到 Excel 文件,例如

http://weblogs.sqlteam.com/joew/archive/2008/08/22/60695.aspx

报告设计将有两个表 - 一个用于字段 1,另一个用于字段 2。您需要编写两个(非常简单的)SQL SELECT 语句来将数据作为两个数据集获取。

Reporting Services 在 Word 渲染方面表现不错。布局可能比 Word 邮件合并复杂得多,例如多个数据区域、嵌套子报表、复杂图表等。

您可以将 Reporting Services 作为桌面应用程序运行,将其嵌入 Windows 或 Word 应用程序,或将其部署到 SharePoint 站点或简单的 Reporting Services 门户。

答案2

可能可以使用 Word 的 DATABASE 字段来实现这一点。插入对话框不在功能区中,因此您必须在 Word 选项中找到它并将其放入 QAT 或类似的东西中。但它存在一两个问题,因此手动插入字段可能更好 - 使用 ctrl-F9 插入一对特殊字段括号代码,这样您就有

{  }

(您不能直接在键盘上输入这些括号)。

然后,{ } 之间的所有内容都是普通文本。假设您的 Excel 文档名为 c:\xl\mywb.xlsx,数据位于名为 Sheet1$ 的工作表中,并且您有 3 个字段,分别称为 Field1、Field2 和 Field3。那么您的第一个 DATABASE 字段可能如下所示:

{ DATABASE  \d "C:\\xl\\mywb.xlsx" \s "SELECT cf1.[field1] FROM [Sheet1$] cf1 WHERE ((cf1.[field1] IS NOT NULL ))" \h }

请注意路径名中的双反斜杠。输入后,选择字段,按 F9 执行,然后使用 Alt-F9 查看结果。如果结果接近第一列所需的值,则此方法可能有效,如果结果不理想,则可能是放弃此方法的好时机。如果报告错误,则可能是由于拼写错误造成的。

一旦有一列正常工作,复制/粘贴数据库字段并更改名称,这样你就有了

{ DATABASE  \d "C:\\xl\\mywb.xlsx" \s "SELECT cf1.[field1] FROM [Sheet1$] cf1 WHERE ((cf1.[field1] IS NOT NULL ))" \h }

{ DATABASE  \d "C:\\xl\\mywb.xlsx" \s "SELECT cf2.[field2] FROM [Sheet1$] cf2 WHERE ((cf2.[field2] IS NOT NULL ))" \h }

然后再次选择 F9、Alt-F9。如果一切顺利,请对其余字段重复上述操作。

几点说明:

WHERE ((cf2.[field2] IS NOT NULL )) 可以处理列中单元格数量不同的情况。但你可能需要更多,这种技术将消除全部空白单元格,而不仅仅是列底部的空单元格。

\h 仅添加列标题。

“cf1”、“cf2”是 SQL“TABLE 别名”。您可以根据需要发明它们。它们可能不是必需的,但它们存在是因为如果没有它们,Word 往往会有点混乱,如果您尝试使用 DATABASE 字段对话框(不会插入这些别名)插入这些字段,您可能会发现这一点。

相关内容