【问题标题】:Merging Documents with Open XML使用 Open XML 合并文档
【发布时间】:2013-08-07 12:12:56
【问题描述】:

我正在我的 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,然后替换值。但是,我不知道是否有“更简单”的方式来做到这一点,谢谢。

【问题讨论】:

    标签: vb.net openxml


    【解决方案1】:

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

    在 .NET 中将 DOCX 转换为 PDF 可能是个问题,但看起来可以使用 Word 自动化 (Saving Word DOCX files as PDF)。

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

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

    【讨论】:

    • 所以假设我在数据表中有 12k 条记录,我想将所有数据合并到一个 word 文档中。我仍然会生成 12k 个临时文件吗?我将如何将它们写入一个 12k 页长的 docx 文件,以便将其保存为 pdf?
    • 我认为在这种情况下,不是生成 12,000 条记录,而是生成 1 个文档(每人),将其转换为 PDF,通过电子邮件发送,然后继续下一个。这样您一次只处理一个人和一组临时文件。我不认为将 12,000 页的文档转换为 12,000 页的 PDF 会简化流程。
    • Open XML 是否支持类似于 word interop 的邮件合并?还是我会为每条记录复制模板并为每个数据行单独编辑每个文件?我注意到有一个 mailmerge 类,但它似乎连接了一个数据源,不一定执行代码来构建更多模板......我也不认为每人生成 1 个文档真的是一种选择,在这一点上,我可能会好吧,只需使用互操作一次批量处理 1000 个字母...
    • 有一些博客文章可以帮助您解决 OpenXML 邮件合并问题。这个看起来是最全面的:openxmldeveloper.org/blog/b/openxmldeveloper/archive/2009/11/01/…
    猜你喜欢
    • 2013-08-23
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多