0

我正在我的 vb.net 应用程序中寻找邮件合并替代方案。使用过word的邮件合并功能,发现处理大量文档时比较有问题。我正在寻找生成合并的替代方法,并且遇到了 open 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()

现在这很好用,但我意识到我需要创建尽可能多的文档,因为我将拥有数据行(假设我使用数据表来处理数据)。

我发现的一个建议是遍历每个数据行,获取我的文档模板,将其保存到文件夹并插入数据行数据。然而,这可能意味着我最终会在一个文件夹中包含 12,000 个文档,这些文档需要稍后合并并转换为 pdf。

还有其他选择吗?对我来说突出的另一件事是创建一个新的 word 文档,并从模板中复制 xml,然后替换值。但是,我不知道是否有“更简单”的方法来做到这一点,谢谢。

4

1 回答 1

0

如果您不想将所有 12,000 个文档保存到文件中,您应该能够使用临时文件一次处理、转换和通过电子邮件发送一份。

在 .NET 中将 DOCX 转换为 PDF 可能是一个问题,但看起来可以使用 Word 自动化(将Word DOCX 文件保存为 PDF)。

底线是,如果您一次执行一个文档,则无需在通过电子邮件发送所有文档之前生成所有文档。您可以SmtpClient在生成 PDF 后在 VB.NET 中使用电子邮件发送它。

在创建文档方面,我看到生成的报告使用简单的字符串替换来用人名等替换字符串,例如“%FIRSTNAME%”。这不一定是最好的方法,但可以很好地工作。通过这种方式,您可以在 Word 或 OpenOffice 中创建模板,然后使用 OpenXML 在 .NET 中对其进行编辑。

于 2013-08-07T12:31:36.227 回答