我在我的vb.net应用程序中寻找邮件合并替代品。我使用了word的邮件合并功能,发现在处理大量文档时它很麻烦。我正在寻找生成合并的替代方法,并遇到了开放的xml。我想这可能是我正在寻找的答案。我已经明白合并将完全由代码驱动在vb.net中。我已经开始使用以下代码:
Dim wordprocessingDocument As WordprocessingDocument = wordprocessingDocument.Open("C:\Users\JasonB\Documents\test.docx", True)
'for each simplefield (mergefield)
For Each field In wordprocessingDocument.MainDocumentPart.Document.Body.Descendants(Of SimpleField)()
'get the document instruction values
Dim instruction As String() = field.Instruction.Value.Split(splitChar, StringSplitOptions.RemoveEmptyEntries)
'if mergefield
If instruction(0).ToLower.Equals("mergefield") Then
Dim fieldname As String = instruction(1)
For Each fieldtext In field.Descendants(Of Text)()
fieldtext.Text = "I AM TESTING"
Next
End If
wordprocessingDocument.MainDocumentPart.Document.Save()
wordprocessingDocument.Dispose()
现在这很好用,但我意识到我需要创建尽可能多的文档,因为我将使用datarows(假设我使用数据表来处理数据)。
我发现的一个建议是遍历每个数据行,获取我的文档模板,将其保存到文件夹并插入数据行数据。然而,这可能意味着我最终在一个文件夹中有12,000个文档需要稍后加入并转换为pdf。
还有其他选择吗?另一件让我感到惊讶的是创建一个新的word文档,并从模板中复制xml,然后替换值。我不知道是否有一种“更简单”的方式,谢谢。
答案 0 :(得分:0)
如果您不想将所有12,000个文档保存到文件,您应该能够使用临时文件一次处理,转换和发送电子邮件。
在.NET中将DOCX转换为PDF可能是一个问题,但看起来可以使用Word Automation(Saving Word DOCX files as PDF)。
最重要的是,如果您一次执行一个文档,则无需在通过电子邮件发送之前生成所有文档。您可以使用VB.NET中的SmtpClient
在生成PDF后通过电子邮件发送PDF。
在创建文档方面,我看到生成的报告使用简单的字符串替换来替换字符串,例如'%FIRSTNAME%'和人名等等。这不一定是最好的方法,但可以很好地工作。这样,您可以在Word或OpenOffice中创建模板,然后使用OpenXML在.NET中编辑它。