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


73

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


4
这应该重新打开。它不仅清晰,有用,而且与其他标记为重复的问题相关联。
DarenW

Answers:


49

答案将在一定程度上取决于应用程序是在服务器上运行还是在客户端计算机上运行。如果您在服务器上运行,则将要使用一种基于XML的Office生成格式,因为在服务器上使用Office Automation时会出现一些已知问题。

但是,如果您在客户端计算机上工作,则可以选择使用Office Automation还是使用Office Open XML格式(请参阅下面的链接),Microsoft Office 2000以及更高版本(本身或通过Service Pack)都支持这种格式。不过,这样做的一个缺点是您可能无法嵌入想要显示的某些图形或图像。

最好的解决方法将视乎您必须花多少时间投资于开发。如果您走Office Automation的路线,那么有很多不错的教程可以通过Google找到,并且很容易学习。但是,Open Office XML格式是相当新的,因此您可能会发现学习曲线要​​高一些。

Office Open XML信息


6
从9/2011开始更新...我同时使用Interop和OpenXml,无论面对哪种情况,我都绝对会使用OpenXml。这是绝对保证您对输出具有绝对控制权的唯一解决方案。
克里斯·贝伦斯


14

我花了大约一周的时间来了解Office Open XML的最新知识。我们有一个数据库应用程序,用于存储要在Microsoft Word中报告的调查数据。您实际上可以在C#中从头开始创建Word 2007(docx)文件。Open XML SDK版本2包含一个称为Document Reflector的炫酷应用程序,该应用程序实际上将提供C#代码以完全重新创建Word文档。您可以使用部分或全部代码,并替换要动态更改的位。SDK随附的帮助文件也包含一些良好的代码示例。

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


10

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

它支持嵌入图像,表格和文本,默认情况下使用Microsoft Word打开,而它的功能集对于外观和感觉类似的东西更加有限(不包括任何高级格式),并且像Word文档一样打开不远。

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


1
请不要使用RTF-规范是一团糟,即使Microsoft也不完全遵循它,并且它有很多歧义。
大卫·蒂伦

10

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

它是付费组件,但有强大的支持。如已经建议的另一种替代方法是RTF。


我发现使用OpenXml文档时缺少Aspose Words。具体来说,它对内容控件的处理几乎是无用的,并且它根本无法处理AltChunk节点。
Collin K


4

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

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

如果您满足许可要求,我认为您将需要使用COM Interop-具体来说就是Office XP Primary Interop程序集


3

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


3

我使用支持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



3

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


2

我目前正在做这件事。

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

对于较大的文档,包括图像和动态插入的图像,我将初始Word文档另存为包含#MergeFields#的单个网页* .mht文件。然后,我做与上述相同的操作。使用此功能,我可以轻松地使用一些基本的HTML表格标签呈现DataTable,并用整个表格替换#MergeFields#之一。

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

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



1

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

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


1

LibreOffice还通过API支持无头交互。不幸的是,目前关于此功能的信息还很少。


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/zh-cn/download/details.aspx?id=5124


0

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


2
仅供参考,当我去某个商业产品的网站时,他们似乎在隐瞒价格,却吹嘘说有免费试用的机会,我自动认为该产品确实很昂贵,而免费试用只是诱饵。如果Docgen疯狂地昂贵,那么隐藏价格可能是正确的,但否则我认为这是错误的。
史蒂夫·海纳

@SteveHiner-我们在那里有价格范围(搜索价格),但是我们取消了价格表,因为很大一部分时间里人们误解了他们的需求,然后感到误导。因此,我们可以更好地了解某人的需求,然后为他们提供合适的价格。
David Thielen

1
@SteveHiner-你是对的。在许多人抱怨之后,我们在网站上提出了价格,并试图对其进行充分的解释,以使他们明白对他们的影响。
David Thielen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.