如何在 C # 中创建 Word 文档?

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

81708 次浏览

答案将稍微取决于应用程序是在服务器上运行还是在客户机上运行。如果您在服务器上运行,那么您将需要使用基于 XML 的办公生成格式之一,因为在 在服务器上使用办公室套装软件比较时会出现一些问题。

但是,如果您在客户机上工作,那么您可以选择使用 用办公室套装软件比较或 Office Open XML 格式(请参阅下面的链接) ,这是由 Microsoft Office 2000支持的,并且可以通过本机或通过服务包进行支持。不过,这样做的一个缺点是,您可能无法嵌入您希望显示的某些类型的图形或图像。

处理事情的最佳方式取决于您在开发上投入的时间。如果你走的是办公室套装软件比较的路线,那里有相当多的好的教程,可以通过谷歌找到,并且相当容易学习。但是,OpenOfficeXML 格式相当新,因此您可能会发现学习曲线有点高。

Office 打开 XML 信息

@ Dale Ragan: 这将适用于 Office2003XML 格式,但是不可移植(例如,。医生或者。Docx 文件)。

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

Http://www.codeproject.com/kb/aspnet/wordapplication.aspx

@ Danny Smurf: 实际上,这篇文章描述了将会成为 Office Open XML 格式的东西,Rob 回答了这个问题。我会更加注意我现在发布的链接,以确保没有过时。我实际上在 WordML 上做了一个搜索,当时它被称为 WordML。

我相信 OfficeOpenXML 格式是最好的选择。

Schmidty,如果你想在网络服务器上生成 Word 文档,你需要为每个 客户(不仅仅是网络服务器)申请许可证。请看 链接第一篇文章中的这一部分:

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

如果你符合许可要求,我认为你将需要使用 COM 互操作-具体来说,主互操作程序集

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

它支持嵌入图片和表格以及文本,默认使用 Microsoft Word 打开,虽然它的功能集更有限(排除任何高级格式)的东西,看起来,感觉和打开像一个 Word 文档不远了。

你的终端用户可能不会注意到。

我发现 闲言碎语是最好的,因为不是每个人都能打开 Office Open XML/* 。Docx 格式的文件和 Word 互操作和 Word 自动化可能是错误的。Aspose Words 支持 Word97以上的大多数文档文件类型。

它是一个付费组件,但有很大的支持。

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

我现在就在做这件事。

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

对于较大的文档,包括图像和动态插入的图像,我将初始 Word 文档保存为 Single Webpage * 。再次包含 # MergeFields # 的 mht 文件。然后我做同样的事情。使用它,我可以轻松地用一些基本的 Html 表标记呈现 DataTable,并用整个表替换 # MergeFields # 中的一个。

图像可以存储在您的服务器和网址嵌入到文档。

有趣的是,新的 Office2007文件格式实际上是 zip 文件——如果将扩展名重命名为。拉上拉链,你就可以打开它们看到里面的东西。这意味着您应该能够使用一个简单的 C # zip 库切换内容,比如图像的输入和输出。

我面对这个问题,并为此创建了一个小型库。它被用于几个项目,然后我决定发表它。这是免费的,非常非常简单,但我相信它将有助于你的任务。调用 OfficeOpenXML 库 http://invoke.co.nz/products/docx.aspx

我已经成功地使用了 SyncFusion Backoffice DocIO,它支持 doc 和 docx 格式。

在之前的版本中,它并不支持所有的文字,但是根据您的列表,我们使用表格和文本作为邮件合并方法对它进行了测试,它工作得很好。

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

引用原文 基本 DocIO 支持将 Scalar 和 Vector 图像插入到文档中,几乎所有格式都支持。位图、 gif、 png 和 tiff 是支持的一些常见图像类型。

所以值得考虑。

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

我花了一个星期左右的时间来了解 Office Open XML的最新情况。我们有一个数据库应用程序,它存储要在 MicrosoftWord 中报告的调查数据。实际上,您可以在 C # 中从头创建 Word2007(docx)文件。Open XML SDK 版本2包含一个很酷的应用程序,名为 Document Refector,它实际上提供了 C # 代码来完全重新创建 Word 文档。您可以使用部分或全部代码,并替换您想要动态更改的位。SDK 中包含的帮助文件也有一些很好的代码示例。

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

在.NET 中生成带办公室套装软件比较的 Word 文档,特别是在 C # 或 VB. NET 中:

  1. Microsoft. Office. Interop. Word程序集引用添加到项目中。路径为 VisualStudioToolsforOfficePIAOffice11Microsoft.Office.Interop.Word.dll

  2. 遵循 Microsoft 代码示例 你可以在这里找到: http://support.microsoft.com/kb/316384/en-us

DocX 免费库 用于创建 DocX 文档,积极开发,使用非常简单直观。由于 CodePlex 正在消亡,项目已经转移到 Github

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

LibreOffice 还支持通过 API 进行无头交互

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

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

WordDocumentGenerator 是一个用于生成 Word 文档的实用工具 使用 Visual Studio 2010和 Open XML 2.0 SDK 的模板。 WordDocumentGenerator 帮助生成 Word 文档 基于预定义模板的不可刷新和可刷新 内容控件用作占位符 它支持 Word2007和 Word2010。

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

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