如何在 C# 中创建 Word 文档? [关闭]

Posted

技术标签:

【中文标题】如何在 C# 中创建 Word 文档? [关闭]【英文标题】:How can a Word document be created in C#? [closed] 【发布时间】:2010-09-05 20:11:49 【问题描述】:

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

【问题讨论】:

这应该重新打开。它不仅清晰有用,而且与其他标记为重复的问题相关联。 【参考方案1】:

答案将稍微取决于应用程序是在服务器上运行还是在客户端计算机上运行。如果您在服务器上运行,那么您将希望使用其中一种基于 XML 的办公生成格式,因为using Office Automation on a server 时存在已知问题。

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

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

Office Open XML 信息

Office Open XML - http://en.wikipedia.org/wiki/Office_Open_XML OpenXML 开发人员 - http://openxmldeveloper.org/default.aspx Office (2007) Open XML 文件格式简介 - http://msdn.microsoft.com/en-us/library/aa338205.aspx

【讨论】:

自 2011 年 9 月起更新...我同时执行 Interop 和 OpenXml,在任何一种情况下都面临这项任务,我绝对会使用 OpenXml。这是唯一绝对保证您对输出有绝对控制权的解决方案。【参考方案2】:

DocX free library 用于创建 DocX 文档,积极开发,使用起来非常简单直观。由于 CodePlex 快要死了,项目已经转移到github。

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

请不要使用 RTF - 规范是一团糟,甚至微软也没有完全遵循它,而且它有很多歧义。【参考方案5】:

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

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

【讨论】:

我发现 Aspose Words 在处理 OpenXml 文档时有点欠缺。具体来说,它对内容控件的处理几乎是无用的,它根本无法处理 AltChunk 节点。【参考方案6】:

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

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

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

【讨论】:

【参考方案7】:

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

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

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

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

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

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

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

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

所以值得考虑。

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

【讨论】:

【参考方案10】:

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

【讨论】:

【参考方案11】:

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

【讨论】:

【参考方案12】:

我目前正在做这件事。

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

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

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

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

【讨论】:

【参考方案13】:

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

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

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

【讨论】:

【参考方案14】:

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

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

【讨论】:

【参考方案15】:

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

【讨论】:

【参考方案16】:

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

WordDocumentGenerator 是一个用于生成 Word 文档的实用程序 使用 Visual Studio 2010 和 Open XML 2.0 SDK 的模板。 WordDocumentGenerator 帮助生成 Word 文档 基于预定义模板的不可刷新和可刷新 使用最少的代码更改。内容控件用作占位符 用于文档生成。它支持 Word 2007 和 Word 2010。

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

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

【讨论】:

【参考方案17】:

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

【讨论】:

仅供参考,当我去一个商业产品的网站时,他们似乎在兜售有免费线索的同时隐藏了价格,我自动假设该产品非常昂贵,免费试用只是饵。如果 Docgen 非常昂贵,那么您隐藏价格可能是正确的,否则我认为这是一个错误。 @SteveHiner - 我们在那里有价格范围(搜索价格),但我们删除了价格表,因为很大一部分时间人们误解了他们需要什么,然后感到被误导了。因此,我们会更好地了解某人的需求,然后给他们合适的价格。 @SteveHiner - 你是对的。在很多人抱怨之后,我们在网站上公布了价格,并试图解释得足够好,他们明白这对他们来说意味着什么。

以上是关于如何在 C# 中创建 Word 文档? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用模板的 word 文档中创建下拉列表?

如何在 Mac OS 上使用 REALbasic 在 OpenOffice 中打开的 Word 文档中创建表格

如何在 C# 中创建神经网络? [关闭]

如何在 C# 中创建 trie [关闭]

如何在 C# 中创建相对于用户文档的文件目录?

如何在 Capella 中创建服务并在我的 M2DOC Word 文档中调用它?