2017-04-20 54 views
0

我有一个任务,我需要在Word(2016)中执行邮件合并。我需要执行正常的邮件合并,但我需要在不使用Outlook的情况下执行一些自定义电子邮件发送。我真的很想使用内置的邮件合并向导,因为它对我们的用户来说很熟悉,但是我找不到调用向导的方法。我发现了VBA的ShowWizard方法,但没有像C#那样。使用VSTO C#可以访问邮件合并向导吗?有没有更好的方法来完成目标?C中的Word邮件合并向导#

回答

0

首先,我建议你不要使用VBA或Interop库。两者只能在装有MS Office的机器上运行。使用VBA应用程序时,如果用户使用不同版本的Office将运行它们,并且您将有新更新,则可能会遇到问题。 Interop在服务器场景中也存在问题。

对于邮件合并,从基于OpenXML的第三方工具包中选择一个工具包是非常有意义的,因此它们可以在没有MS Office的情况下运行(思考服务器场景)。您将需要带有占位符数据的MS Word模板文档。然后,您可以使用c#为报告加载数据,并将数据与模板合并以获取最终文档(docx,pdf,xps或图像格式)。下面是需要与模板从数据库将数据合并得到一个PDF文档一个这样的工具包使用的代码:

IEnumerable<Customer> customers = DataAccess.GetCustomerById(15); 
DocumentGenerator dg = new DocumentGenerator(customers); 
DocumentGenerationResult result = dg.GenerateDocument("MyTemplate.docx", "MyReport.pdf"); 

在此link你可以找到更多的信息和示例。

到目前为止,您有一种方法来生成邮件合并文档。现在到你的第二个问题,这是邮寄这些文件。

我假设你的电子邮件服务器是基于MS Exchange的。较新版本的MS Exchange Server公开可以从客户端使用的Web服务,而无需安装Outlook。

有一些分步教程,如https://msdn.microsoft.com/en-us/library/office/dn567668(v=exchg.150).aspx,这将有助于您开始。您将能够编写将完全控制发送邮件消息的各个方面的应用程序。我为我们公司做了一个简单的邮件发送库。我花了一些时间来弄清楚它的来龙去脉,但现在它是一个不可或缺的东西。它运行顺畅,没有任何问题。

+0

感谢@ jura为我指出正确的方向。有没有免费的openxml工具包可以推荐?我将看看Nuget上的OpenXML SDK。它看起来像有一些工具可以将DOCX转换为HTML,并将从XLSX中提取数据,这两者都是我需要的。 – mack

+0

如果您必须执行简单的文档操作,OpenXML SDK才有意义。我不得不用复杂的模板来解决复杂的文档合并问题。我的时间非常有限,所以我使用了第三方库。 –