复杂邮件合并(CSV到Word、CSV到PDF或其他)

bwntbbo3  于 2023-06-03  发布在  其他
关注(0)|答案(2)|浏览(749)

**问题:**如何为Word或PDF编写ifStatement来计算每个匹配结果的多行?
**用法:**我想做的似乎相当直接,当我能够使用MS Access 15年前是非常容易的,但与Access是不是一个可能性了,我希望有人有一个合理的解决方案.
**什么:**我试图从CSV(或任何格式的电子表格)生成报表/发票到一个漂亮的报告布局。假设列看起来像这样:

First Name | Last Name | Account | Address | Item | Description | Item Total
Jane | Smith | 123 | 111 Main St | Ice Cream | it's really cold | $100.00

这是超级容易,我可以在Word中做10分钟内,使它“漂亮”。

但如果每张发票有多个项目怎么办?

所以CSV可能看起来像:

First Name | Last Name | Account | Address | Item | Description | Item Total
Jane | Smith | 123 | 111 Main St | Ice Cream | it's really cold | $100.00
Jane | Smith | 123 | 111 Main St | Hot Dogs | all beef, all the time | $200.00
  • 我仍然希望每人只有一张发票,但不知道如何在Word中执行if语句,该语句会说“如果每人有多个项目,请将它们放在新的一行中,然后将它们合计在一起”*

如果我能让多行工作,我很高兴将CSV转换为PDF可填充表单-我只是不能弄清楚这一部分。* 其他选项:我看了看OpenOffice的“基地”,但不能得到一个很好的形式,一个非常自定义的报告。我简要地研究了如何在AWS上做这样的事情,但没有任何运气。我不认为微软有任何类似的访问了 *

8ehkhllq

8ehkhllq1#

您可以使用Word的Catalogue/Directory Mailmerge工具来完成此操作(术语取决于Word版本)。要了解如何使用Word支持的任何邮件合并数据源执行此操作,请查看我的Microsoft Word目录/目录邮件合并教程,网址为:http://www.msofficeforums.com/mail-merge/38721-microsoft-word-catalogue-directory-mailmerge-tutorial.html或:http://www.gmayor.com/Zips/Catalogue%20Mailmerge.zip本教程涵盖了从列表创建到在字母中的多记录表中插入和计算值的所有内容。在尝试使用随附的mailmerge文档之前,请务必阅读本教程。
根据您要实现的目标,此字段的编码可能会很复杂。然而,由于教程文档包括所有示例的工作字段代码,因此大部分艰苦的工作已经为您完成-您应该能够做的只是将相关字段代码复制/粘贴到您自己的mailmerge主文档中,替换/插入您自己的字段名称并调整格式以获得您想要的结果。对于一些工作的例子,请参阅附件的职位:http://www.msofficeforums.com/mail-merge/9180-mail-merge-duplicate-names-but-different-dollar.html#post23345http://www.msofficeforums.com/mail-merge/11436-access-word-creating-list-multiple-records.html#post30327
另一种选择是在普通的“letter”邮件合并主文档中使用DATABASE字段和宏来驱动该过程。这一方法的概要见:http://answers.microsoft.com/en-us/office/forum/office_2010-word/many-to-one-email-merge-using-tables/8bce1798-fbe8-41f9-a121-1996c14dca5d相反,如果您使用的是关系数据库或Excel工作簿,其中包含单独的表,每个分组条件只有一个示例,则可以使用普通'letter' mailmerge主文档中的DATABASE字段,而无需宏。这一方法的概要见:https://answers.microsoft.com/en-us/msoffice/forum/msoffice_word-mso_winother-mso_2010/mail-merge-to-a-word-table-on-a-single-page/4edb4654-27e0-47d2-bd5f-8642e46fa103有关工作示例,请参见:http://www.msofficeforums.com/mail-merge/37844-mail-merge-using-one-excel-file-multiple.html DATABASE字段的问题是,它不会提供您想要的总数。不过,如果您使用宏方法,那么将total行追加到结果表中并不需要太多的代码。
或者,您可能希望尝试以下多对一邮件合并加载项之一:格雷厄姆·马约尔在http://www.gmayor.com/ManyToOne.htm;或道格·罗宾斯在https://onedrive.live.com/?cid=5AEDCB43615E886B&id=5AEDCB43615E886B!566

**PS:**虽然我认识到StackOverflow更喜欢在这里发布答案的实质内容,而不是链接到,但这种情况下的复杂性太大,无法以这种方式处理,除此之外,人们不能在这里发布实际的字段代码或包含它们的文档。

qxsslcnc

qxsslcnc2#

下面的方法使用Word的Mail Merge函数和IF merge fields、两个变量(oldinvoicenewinvoice)以及MERGESEQ字段来决定是否需要打印标题(仅针对第一条记录和每次发票编号更改时)
您需要为发票的标题绘制一个表格,为详细信息绘制一个单行表格。我假设标题的所有信息都复制到每个记录中,就像在CSV中一样。要插入新字段或条件字段,您需要从Word菜单中选择它,也可以直接编辑,但需要使用CTRL+F9生成{}符号。您的模板将像这样构建:

{IF{MERGESEQ}="1"{SET oldinvoice"0"} "" }

如果是第一个记录,则设置oldvoice=0,否则不打印任何内容

{SET newinvoice {MERGEFIELD Invoice}}

newinvoice变量设置为CSV的invoice字段的值

{IF{oldinvoice}<>{newinvoice}"--insert a page break-- 
and the table for the header of the invoice with fields placed"  ""}

当发票编号更改时,打印发票的标题
然后,您将需要一个单行表,用于内部和结尾的详细信息:

{SET oldinvoice {MERGEFIELD Invoice}}

oldinvoice变量分配刚才使用的发票编号
类似于:

您还需要添加更多字段(如发票编号、日期和总计)。为了测试这个例子,我输入了一个发票号,并为第二张发票添加了两行

Invoice|First Name | Last Name | Account | Address | Item | Description | Item Total
100|Jane | Smith | 123 | 111 Main St | Ice Cream | it's really cold | $100.00
100|Jane | Smith | 123 | 111 Main St | Hot Dogs | all beef, all the time | $200.00
101|Paul | Klee | 321 | 222 Abbey Rd | Something | it's in the air | $101.00
101|Jane | Klee | 321 | 222 Abbey Rd | Polythene Pam | eating bags | $202.00

使用Mailmerge function (Directory type)将所有内容组合在一起,并将模板与CSV关联将生成一个新文档(您现在可以打印或导出为PDF)。类似于这个的东西:

如果需要总计,则需要一个新变量来存储总计,并找到一种方法在新分页符和新页眉之前打印它。

相关问题