我有一个项目想要生成 MS Word 格式的报告导出。该报告将包括图像/图表、表格和文本。做这个的最好方式是什么?第三方工具?你有什么经历?

有帮助吗?

解决方案

答案将稍微取决于应用程序是在服务器上运行还是在客户端计算机上运行。如果您在服务器上运行,那么您将需要使用一种基于 XML 的 Office 生成格式,因为在以下情况下存在已知问题: 在服务器上使用办公自动化.

但是,如果您在客户端计算机上工作,那么您可以选择 使用办公自动化 或者使用 Office Open XML 格式(请参阅下面的链接),Microsoft Office 2000 及更高版本本身或通过服务包支持该格式。不过,这样做的一个缺点是您可能无法嵌入您希望显示的某些类型的图表或图像。

处理事情的最佳方式完全取决于您在开发上投入的时间。如果您选择办公自动化,可以通过 Google 找到很多很好的教程,而且学习起来相当简单。然而,Open Office XML 格式相当新,因此您可能会发现学习曲线有点高。

Office Open XML I信息

其他提示

DocX 免费库 用于创建 DocX 文档,积极开发且使用起来非常简单直观。由于 CodePlex 即将消亡,项目已转移到 github.

我花了大约一周的时间来加快速度 办公室开放 XML. 。我们有一个数据库应用程序,用于存储我们想要在 Microsoft Word 中报告的调查数据。实际上,您可以使用 C# 从头开始​​创建 Word 2007 (docx) 文件。Open XML SDK 版本 2 包括一个名为 Document Reflector 的很酷的应用程序,它实际上提供 C# 代码来完全重新创建 Word 文档。您可以使用部分或全部代码,并替换您想要即时更改的位。SDK 附带的帮助文件也有一些很好的代码示例。

服务器上不需要 Office Interop 或任何其他 Office 软件 - 新格式是 100% XML。

您是否考虑过使用 .RTF 作为替代方案?

它支持嵌入图像、表格以及文本,默认使用 Microsoft Word 打开,虽然它的功能集更加有限(不包括任何高级格式),但对于看起来、感觉和打开像 Word 文档的东西来说,它并不遥远。

您的最终用户可能不会注意到。

我已经发现 构词 成为最好的,因为并非每个人都可以打开 Office Open XML/*.docx 格式文件,并且 Word 互操作和 Word 自动化可能存在问题。Aspose Words 支持 Word 97 及以上版本的大多数文档文件类型。

它是一个付费组件,但拥有强大的支持。已经建议的另一种选择是 RTF。

要在 .NET 中(特别是在 C# 或 VB.NET 中)使用 Office Automation 生成 Word 文档:

  1. 添加 Microsoft.Office.Interop.Word 对您的项目的程序集引用。路径是 \Visual Studio Tools for Office\PIA\Office11\Microsoft.Office.Interop.Word.dll.

  2. 请按照您可以在此处找到的Microsoft代码示例: http://support.microsoft.com/kb/316384/en-us.

Schmidty,如果您想在 Web 服务器上生成 Word 文档,则每个文档都需要一个许可证 客户 (不仅仅是网络服务器)。请参阅第一部分中的此部分 关联 罗布发布:

“除了技术问题之外,还必须考虑许可问题。当前的许可准则禁止在服务器上使用 Office 应用程序来服务客户端请求,除非这些客户端本身拥有 Office 的许可副本。最终用户许可协议 (EULA) 不涵盖使用服务器端自动化向未经许可的工作站提供 Office 功能。”

如果您满足许可要求,我认为您将需要使用 COM Interop - 具体来说, Office XP 主要互操作程序集.

查看 VSTO(Office 的 Visual Studio 工具)。创建一个Word模板,向其中注入一个xml数据岛,然后将其发送给客户端是相当简单的。当用户在 Word 中打开文档时,Word 会读取 xml 并将其转换为 WordML 并呈现它。您将需要查看 VSTO 库的 ServerDocument 类。根据我的经验,不需要额外的许可。

我使用支持 doc 和 docx 格式的 Syncfusion Backoffice DocIO 取得了巨大成功。

在之前的版本中,它并不支持单词中的所有内容,但根据您的列表,我们使用表格和文本作为邮件合并方法对其进行了测试,并且效果很好。

但不确定图像的导入。在他们的简介页面上 http://www.syncfusion.com/products/DocIO/Backoffice/features/default.aspx 它说

BlockQuote Essential Docio几乎以所有格式将标量和向量图像插入文档中。位图、gif、png 和 tiff 是支持的一些常见图像类型。

所以值得考虑。

正如其他人提到的,您可以构建 RTF 文档,.net 有一些很好的 RTF 库,例如 http://www.codeproject.com/KB/string/nrtftree.aspx

我遇到了这个问题并为此创建了一个小型库。它被用在几个项目中,然后我决定发布它。它是免费的,而且非常非常简单,但我相信它会帮助您完成任务。调用 Office Open XML 库, http://invoke.co.nz/products/docx.aspx.

我写了一个 有关 Open XML WordprocessingML 文档生成的博客文章系列. 。我的方法是创建一个包含内容控件的模板文档,并在每个内容控件中编写一个 XPath 表达式,该表达式定义如何从包含驱动文档生成过程的数据的 XML 文档中检索内容。该代码是免费的,并根据 Microsoft 互惠许可 (Ms-RL). 。在同一博客文章系列中,我还探索了一种在内容控件中编写 C# 代码的方法。然后,文档生成过程处理模板文档并生成可生成所需文档的 C# 程序。这种方法的一个优点是您可以使用 任何 数据源作为文档生成过程的数据源。该代码也根据 Microsoft 互惠许可证获得许可。

我目前正在做这件事。

如果文档不是很大,不包含图像等,那么我将其存储为 RTF,其中包含#MergeFields#,然后简单地用内容替换它们,将结果作为 RTF 发送给用户。

对于较大的文档(包括图像和动态插入的图像),我再次将初始 Word 文档另存为包含#MergeFields# 的单个网页 *.mht 文件。然后我按照上面的方法做同样的事情。使用它,我可以轻松地使用一些基本的 Html 表标签渲染 DataTable,并将 #MergeFields# 之一替换为整个表。

图像可以存储在您的服务器上,并且 URL 也可以嵌入到文档中。

有趣的是,新的 Office 2007 文件格式实际上是 zip 文件 - 如果将扩展名重命名为 .zip,则可以打开它们并查看其内容。这意味着您应该能够使用简单的 C# zip 库来切换图像等内容。

@戴尔·拉根:这适用于 Office 2003 XML 格式,但不可移植(例如 .doc 或 .docx 文件)。

要读取/写入这些内容,您需要使用 Word 对象库 ActiveX 控件:

http://www.codeproject.com/KB/aspnet/wordapplication.aspx

@丹尼·斯莫夫:实际上,本文描述了 Rob 所回答的 Office Open XML 格式。我会更加关注我现在发布的链接,以确保它们不会过时。我实际上在 WordML 上进行了搜索,当时它是这么叫的。

我相信 Office Open XML 格式是最好的选择。

自由办公室 还支持通过 API 进行无头交互。不幸的是,目前还没有关于此功能的太多信息。:(

您还可以使用 Word 文档生成器。它可用于客户端或服务器端部署。从项目描述来看:

WordDocumentGenerator是一种使用Visual Studio 2010并打开XML 2.0 SDK从模板中生成Word文档的实用程序。WordDocumentGenerator可以使用最小代码更改基于预定义的模板来生成不可恢复和刷新的Word文档。内容控件用作文档生成的占位符。它支持Word 2007和Word 2010。

抓住它: http://worddocgenerator.codeplex.com/

下载SDK: http://www.microsoft.com/en-us/download/details.aspx?id=5124

另一种选择是 迎风文档根 (免责声明 - 我是创始人)。使用 Windward,您可以在 Word 中设计模板,包括图像、表格、图表、仪表以及您想要的任何其他内容。您可以设置插入来自 XML 或 SQL 数据源的数据的标记(包括 forEach 循环、导入等功能)。然后生成 DOCX、PDF、HTML 等格式的报告。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top