【问题标题】:ASP.NET Export Data To Word TemplateASP.NET 将数据导出到 Word 模板
【发布时间】:2011-01-20 21:52:58
【问题描述】:

我在 Word 2007 模板中有几个套用信函。我需要从我的 Web 表单应用程序(Sql Server 2008 后端)传递数据。

我需要尽可能无缝地执行此操作,因此无法为 word 生成文本文件以用作数据源。出于性能原因,我还想避免在我的 Web 服务器上运行 Office。

我想知道是否有办法将模板 xml 存储在我的数据库中,并在需要生成字母时用我的数据填充适当的元素,并将此文件直接下载到用户机器上。

有没有人能解决这类问题?

【问题讨论】:

    标签: asp.net sql-server xml sql-server-2008 ms-word


    【解决方案1】:

    如果您使用要替换的标记创建 Word 2007 .docx 文件,则可以轻松地替换服务器上的标记,并向客户端发送一个基于旧标记的新 .docx 文件。

    1. 将您的模板创建为 .docx 文件并将其保存在服务器上
    2. 使用易于查找和解析的占位符更改所有邮件合并字段,这些占位符不会正常出现在文档中并且不需要 XML 编码。例如:{{FirstName}}。
    3. 为您要生成的每个文档创建一个新的空白 .docx (zip) 文件
    4. 从模板 .docx 文件中读取每个文件
    5. 在阅读源文件时,搜索并适当替换您的标记
    6. 确保对您放入新文档中的所有文本进行 XML 编码。您可以使用HttpUtility.HtmlEncodeXmlTextWriter 实例或自定义方法将违规字符()替换为相应的 xml 实体。
    7. 向客户端发送文件

    更复杂的事情可以通过操纵 WordML 标签来完成,但如果你只是想替换一些可变数据,上面将是最简单/快速的方法。

    【讨论】:

    • 我已经多次使用这种方法,唯一需要注意的是加载可能破坏 XML 文档的字符/数据。如果你加载纯文本你应该没问题,但如果你试图加载一些花哨的东西要小心!
    • 听起来是个不错的解决方案。有任何关于这可能如何工作的示例的链接吗?我不熟悉以这种方式处理文本文件,或者我可能还没有完全理解这一点
    • @Zack,好点子。您可以使用HttpServerUtility.HtmlEncode 对文本进行编码、使用XmlTextWriter 或自定义方法将违规字符(<'">)替换为相应的 xml 实体。
    • 我们是在谈论使用 OpenXML sdk for word 来生成输出文档吗?
    • @stephen776,实际上在这种情况下,没有。这是简单的字符串操作,只需解压缩 .docx 文件并将其中的文件作为文本文件进行处理即可完成。这比在这种特殊情况下不需要使用 Office Open XML SDK 更容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多