如何在C#中创buildWord文档?
我有一个项目,我想生成MS Word格式的报告导出。 报告将包括图像/图表,表格和文字。 做这个的最好方式是什么? 第三方工具? 你有什么经验?
如果应用程序在服务器上运行,或者在客户端机器上运行,答案将会略有不同。 如果您正在服务器上运行,那么您将要使用基于XML的办公室生成格式之一,因为在服务器上使用Office Automation时存在已知问题。
但是,如果您正在使用客户端计算机,则可以select使用Office自动化还是使用Microsoft Office 2000支持的Office Open XML格式(请参阅下面的链接),本地或通过Service Pack。 但是,一个退步是,你可能无法embedded你想要显示的graphics或图像。
要做好事情的最好方法,都要视乎你有多less时间投资发展。 如果你走的办公自动化的路线有很多很好的教程,可以通过谷歌find,是相当简单的学习。 但是,Open Office XML格式是相当新的,因此您可能会发现学习曲线会更高一些。
Office Open XML Iinformation
- 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/zh-cn/library/aa338205.aspx
用于创buildDocX文档的DocX免费库 ,积极开发,使用非常简单直观。 由于CodePlex正在死亡,项目已经转移到github 。
我过去做过的最快捷的方法是使用XML。 这是一个很好的文章,应该让你开始:
我花了上周左右的时间来加快Office Open XML的速度。 我们有一个数据库应用程序,用于存储我们想要在Microsoft Word中报告的调查数据。 实际上,您可以在C#中从头开始创buildWord 2007(docx)文件。 Open XML SDK第2版包含一个名为“文档reflection器”的酷应用程序,它将实际提供C#代码以完全重新创buildWord文档。 您可以使用部分代码或全部代码,并且replace您想要即时更改的位。 包含在SDK中的帮助文件也有一些好的代码示例。
在服务器上不需要Office Interop或任何其他Office软件 – 新格式为100%XML。
你有没有考虑使用.RTF作为替代?
它支持embedded图像和表格以及文本,默认情况下使用Microsoft Word打开,虽然它的function更受限制(计算出任何高级格式),看起来和感觉像一个Word文档打开它不远处。
您的最终用户可能不会注意到。
我发现Aspose Words是最好的,因为不是每个人都可以打开Office Open XML / *。docx格式文件,而Word interop和Word自动化可以是越野车。 Aspose Words支持从Word 97向上的大多数文档文件types。
这是一个付费组件,但有很大的支持。 如已经提出的另一种select是RTF。
在.NET中使用Office Automation生成Word文档,特别是在C#或VB.NET中:
-
将Microsoft.Office.Interop.Word程序集引用添加到您的项目。 path是\ Visual Studio工具用于Office \ PIA \ Office11 \ Microsoft.Office.Interop.Word.dll 。
-
按照您可以在这里find的Microsoft代码示例: http : //support.microsoft.com/kb/316384/en-us 。
Schmidty,如果你想在Web服务器上生成Word文档,你将需要每个客户端的许可证(而不仅仅是Web服务器)。 看到这个部分在第一个链接罗布张贴:
“除了技术问题之外,还必须考虑许可问题,当前的许可准则禁止在服务器上使用Office应用程序来为客户端请求提供服务,除非这些客户端本身拥有Office的许可副本使用服务器端自动化为Officefunction提供未经许可的工作站不受最终用户许可协议(EULA)的保护。“
如果您符合许可要求,我认为您需要使用COM Interop – 具体而言,即Office XP主互操作程序集 。
查看VSTO(Visual Studio Tools for Office)。 创build一个Word模板非常简单,注入一个XML数据岛,然后将其发送到客户端。 当用户在Word中打开文档时,Word将读取xml并将其转换为WordML并呈现它。 您将需要查看VSTO库的ServerDocument类。 根据我的经验,不需要额外的许可。
我使用支持doc和docx格式的Syncfusion Backoffice DocIO取得了很好的成功。
在之前的版本中,它并不支持所有的东西,但是按照你的列表,我们用表格和文本作为邮件合并的方法来testing它,并且它工作的很好。
不知道关于图像的导入。 它在blurb页面http://www.syncfusion.com/products/DocIO/Backoffice/features/default.aspx它说;
Blockquote Essential DocIO支持将Scalar和Vector图像以几乎所有格式插入文档。 位图,GIF,PNG和TIFF是一些支持的常见图像types。
所以值得考虑。
正如其他人已经提到,你可以build立一个RTF文件,有一些很好的RTF库.net如http://www.codeproject.com/KB/string/nrtftree.aspx
我写了一篇关于Open XML WordprocessingML文档生成的博客文章系列 。 我的方法是创build一个包含内容控件的模板文档,并在每个内容控件中编写一个XPathexpression式,该expression式定义了如何从包含驱动文档生成过程的数据的XML文档中检索内容。 该代码是免费的,并根据Microsoft相互许可证(Ms-RL)许可 。 在同一篇博客文章系列中,我还探讨了一种在内容控件中编写C#代码的方法。 文档生成过程然后处理模板文档并生成生成所需文档的C#程序。 这种方法的一个优点是可以使用任何数据源作为文档生成过程的数据源。 该代码也是根据微软互惠牌照授权的。
我目前正在做这个确切的事情。
如果文档不是很大,不包含图片等,那么我将它作为一个RTF格式存储在其中,并且只需将其replace为内容,然后将结果作为RTF发送给用户。
对于较大的文档,包括图像和dynamic插入的图像,我将初始Word文档另存为包含#MergeFields#的单个网页* .mht文件。 然后我做同样的事情。 使用这个,我可以很容易地用一些基本的Html表格标签来呈现一个DataTable,并用一个整个表格replace#MergeFields#中的一个。
图像可以存储在您的服务器上,也可以embedded到文档中。
有趣的是,新的Office 2007文件格式实际上是zip文件 – 如果您将扩展名重命名为.zip,您可以打开它们并查看其内容。 这意味着您应该能够使用简单的C#zip库来切换内容,如图像。
我面临这个问题,并为此创build了一个小型图书馆。 它被用于几个项目,然后我决定发布它。 这是免费的,非常简单,但我相信它会帮助你的任务。 调用Office Open XML库http://invoke.co.nz/products/docx.aspx 。
@Dale Ragan:这将适用于Office 2003 XML格式,但这不是可移植的(例如.doc或.docx文件)。
要读/写这些,你需要使用Word Object Library ActiveX控件:
@Danny Smurf:实际上这篇文章描述了什么将成为罗布回答的Office Open XML格式。 我会更加关注我现在发布的链接,以确保没有过时。 我实际上是在WordML上进行search,这是当时所谓的。
我相信Office Open XML格式是最好的select。
LibreOffice还支持通过API进行无头交互。 不幸的是,目前还没有关于这个function的很多信息。
你也可以使用Word文档生成器。 它可以用于客户端或服务器端部署。 从项目说明:
WordDocumentGenerator是一个实用工具,可以使用Visual Studio 2010和Open XML 2.0 SDK从模板生成Word文档。 WordDocumentGenerator通过使用最less的代码更改,帮助生成不可刷新的Word文档以及基于预定义模板的可刷新文档。 内容控件用作文档生成的占位符。 它支持Word 2007和Word 2010。
抓住它: http : //worddocgenerator.codeplex.com/
下载SDK: http : //www.microsoft.com/en-us/download/details.aspx?id=5124
另一个select是Windward Docgen (免责声明 – 我是创始人)。 随着Windward你在Word中devise的模板,包括图像,表格,图表,仪表,和任何你想要的。 您可以设置标签插入来自XML或SQL数据源的数据(包括forEach循环,导入等function)。 然后生成DOCX,PDF,HTML等报告