我有一个项目,我想以MS Word格式生成报告导出。该报告将包括图像/图形,表格和文本。做这个的最好方式是什么?第三方工具?你有什么经验?
Answers:
答案将在一定程度上取决于应用程序是在服务器上运行还是在客户端计算机上运行。如果您在服务器上运行,则将要使用一种基于XML的Office生成格式,因为在服务器上使用Office Automation时会出现一些已知问题。
但是,如果您在客户端计算机上工作,则可以选择使用Office Automation还是使用Office Open XML格式(请参阅下面的链接),Microsoft Office 2000以及更高版本(本身或通过Service Pack)都支持这种格式。不过,这样做的一个缺点是您可能无法嵌入想要显示的某些图形或图像。
最好的解决方法将视乎您必须花多少时间投资于开发。如果您走Office Automation的路线,那么有很多不错的教程可以通过Google找到,并且很容易学习。但是,Open Office XML格式是相当新的,因此您可能会发现学习曲线要高一些。
Office Open XML信息
我花了大约一周的时间来了解Office Open XML的最新知识。我们有一个数据库应用程序,用于存储要在Microsoft Word中报告的调查数据。您实际上可以在C#中从头开始创建Word 2007(docx)文件。Open XML SDK版本2包含一个称为Document Reflector的炫酷应用程序,该应用程序实际上将提供C#代码以完全重新创建Word文档。您可以使用部分或全部代码,并替换要动态更改的位。SDK随附的帮助文件也包含一些良好的代码示例。
服务器上不需要Office Interop或任何其他Office软件-新格式为100%XML。
我发现Aspose Words是最好的,因为不是每个人都可以打开Office Open XML / *。docx格式的文件,并且Word互操作和Word自动化可能会出错。Aspose Words支持Word 97以上的大多数文档文件类型。
它是付费组件,但有强大的支持。如已经建议的另一种替代方法是RTF。
要在.NET(尤其是C#或VB.NET)中使用Office Automation生成Word文档,请执行以下操作:
将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。
Schmidty,如果要在Web服务器上生成Word文档,则将需要每个客户端(而不仅仅是Web服务器)的许可证。请参阅Rob发布的第一个链接中的本节:
“除了技术问题之外,您还必须考虑许可问题。当前的许可准则禁止在服务器上使用Office应用程序来满足客户端请求,除非这些客户端本身已获得Office的许可副本。使用服务器端自动化来提供Office功能来最终用户许可协议(EULA)不涵盖未经许可的工作站。”
如果您满足许可要求,我认为您将需要使用COM Interop-具体来说就是Office XP Primary Interop程序集。
我使用支持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
我遇到了这个问题,为此创建了一个小库。它被用于多个项目,然后我决定发布它。它是免费的,而且非常简单,但是我相信它将对您的任务有所帮助。调用Office Open XML库http://invoke.co.nz/products/docx.aspx。
我写了一篇有关Open XML WordprocessingML文档生成的博客文章系列。我的方法是创建一个包含内容控件的模板文档,并在每个内容控件中编写一个XPath表达式,该表达式定义如何从包含驱动文档生成过程的数据的XML文档中检索内容。该代码是免费的,并且根据Microsoft互惠许可证(Ms-RL)获得许可。在同一篇博客文章系列中,我还将探讨一种在内容控件中编写C#代码的方法。然后,文档生成过程处理模板文档,并生成C#程序,该程序生成所需的文档。这种方法的优点之一是您可以使用任何数据源作为文档生成过程的数据源。该代码也获得了Microsoft互惠许可的许可。
我目前正在做这件事。
如果文档不是很大,不包含图像等,那么我将其存储为带有#MergeFields#的RTF,并简单地将其替换为内容,然后将结果作为RTF发送给用户。
对于较大的文档,包括图像和动态插入的图像,我将初始Word文档另存为包含#MergeFields#的单个网页* .mht文件。然后,我做与上述相同的操作。使用此功能,我可以轻松地使用一些基本的HTML表格标签呈现DataTable,并用整个表格替换#MergeFields#之一。
图像可以存储在服务器上,URL也可以嵌入文档中。
有趣的是,新的Office 2007文件格式实际上是zip文件-如果将扩展名重命名为.zip,则可以打开它们并查看其内容。这意味着您应该能够使用一个简单的C#zip库来切换内容,例如图像。
@Dale Ragan:这将适用于Office 2003 XML格式,但是它不是可移植的(例如,.doc或.docx文件是可移植的)。
要读取/写入这些内容,您需要使用Word对象库ActiveX控件:
@Danny Smurf:实际上,本文描述了将成为Rob回答的Office Open XML格式。我将更加关注我现在发布的链接,以确保这些链接不会过时。我实际上是在WordML上进行搜索的,当时它被称为。
我相信Office Open XML格式是最好的选择。
LibreOffice还通过API支持无头交互。不幸的是,目前关于此功能的信息还很少。
您也可以使用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
另一种选择是Windward Docgen(免责声明-我是创始人)。使用Windward,您可以在Word中设计模板,包括图像,表格,图形,量规以及您想要的任何其他内容。您可以设置插入XML或SQL数据源中的数据的标记(包括诸如forEach循环,导入等功能)。然后将报告生成为DOCX,PDF,HTML等。