73

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

4

17 回答 17

49

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

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

处理事情的最佳方式将完全取决于您必须在开发上投入多少时间。如果你走办公自动化的路线,那里有很多很好的教程,可以通过谷歌找到,而且学习起来相当简单。但是,Open Office XML 格式相当新,因此您可能会发现学习曲线要​​高一些。

Office Open XML 信息

于 2008-08-13T22:19:48.597 回答
17

DocX 免费库,用于创建 DocX 文档,积极开发,使用起来非常简单直观。由于 CodePlex 即将死去,项目已移至github

于 2010-07-22T15:07:43.890 回答
14

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

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

于 2009-05-20T13:40:29.133 回答
10

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

它支持嵌入图像和表格以及文本,默认情况下使用 Microsoft Word 打开,虽然它的功能集更有限(不包括任何高级格式),但它的外观和感觉以及像 Word 文档一样打开它并不遥远。

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

于 2008-08-14T14:43:18.967 回答
10

我发现Aspose Words是最好的,因为不是每个人都可以打开 Office Open XML/*.docx 格式文件,而且 Word 互操作和 Word 自动化可能有问题。Aspose Words 支持 Word 97 以上的大多数文档文件类型。

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

于 2008-08-14T14:57:55.410 回答
7

要在 .NET 中使用 Office 自动化生成 Word 文档,特别是在 C# 或 VB.NET 中:

  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

于 2009-12-01T22:50:07.213 回答
4

Schmidty,如果您想在 Web 服务器上生成 Word 文档,您将需要每个客户端(不仅仅是 Web 服务器)的许可证。请参阅Rob 发布的第一个链接中的此部分:

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

如果您满足许可要求,我认为您将需要使用 COM Interop - 具体而言,Office XP Primary Interop Assemblies

于 2008-08-13T23:21:17.520 回答
3

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

于 2008-08-14T15:03:28.893 回答
3

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

于 2008-12-25T21:51:35.273 回答
3

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

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

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

Blockquote Essential DocIO 支持在文档中插入几乎所有格式的标量和矢量图像。位图、gif、png 和 tiff 是支持的一些常见图像类型。

所以值得考虑。

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

于 2009-04-09T04:07:49.337 回答
3

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

于 2011-05-12T03:50:12.827 回答
2

我目前正在做这件事。

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

对于较大的文档,包括图像和动态插入的图像,我将初始 Word 文档另存为包含 #MergeFields# 的单个网页 *.mht 文件。然后我做和上面一样的事情。使用它,我可以轻松地呈现带有一些基本 Html 表格标签的 DataTable,并将其中一个 #MergeFields# 替换为整个表格。

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

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

于 2008-09-15T11:05:14.050 回答
1

@Dale Ragan:这将适用于 Office 2003 XML 格式,但这不是可移植的(例如 .doc 或 .docx 文件)。

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

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

于 2008-08-13T22:21:07.313 回答
1

@Danny Smurf:实际上,这篇文章描述了 Rob 回答的 Office Open XML 格式。我将更加关注我现在发布的链接,以确保它们不会过时。我实际上在 WordML 上进行了搜索,这就是当时的名称。

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

于 2008-08-13T22:34:09.410 回答
1

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

于 2011-11-14T09:56:50.777 回答
1

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

WordDocumentGenerator 是一个使用 Visual Studio 2010 和 Open 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

于 2012-12-27T19:08:10.487 回答
0

另一种选择是Windward Docgen(免责声明 - 我是创始人)。使用 Windward,您可以在 Word 中设计模板,包括图像、表格、图形、仪表和任何您想要的东西。您可以设置插入 XML 或 SQL 数据源数据的标签(包括 forEach 循环、导入等功能)。然后生成报告为 DOCX、PDF、HTML 等。

于 2012-06-06T22:37:33.763 回答