如何使用c#,dot net,word模板,xml在word 2010中生成报告

问题描述:

我们有一个数据库应用程序,用于存储我们想要在Microsoft Word中报告的数据。如何使用c#,dot net,word模板,xml在word 2010中生成报告

假设我的客户的所有信息都存储在数据库系统中,并且我现在要求创建数百个字母,并将报告发送给我的客户。这些字母具有相同的内容,但不同的客户名称,客户地址等。

我想利用Office Word 2010创建文档模板,其内容控件使用c#和.Net,sql作为数据库来替换内容这个模板。

我一直在寻找在C#中自动化Word 2010和dot net和sql的文章。有人能给我一个正确的方向吗?

+1

请参阅http://*.com/questions/7382704/asp-net-web-service-using-office-2010-com。它不支持在ASP.NET应用程序中使用office自动化 - 并且通常不起作用。 –

+1

这个问题没有被标记为ASP.NET,并没有在正文中提及它。 – Emyr

+1

不是那个尖叫“使用Word的连续字母功能!”? –

我曾经使用Interop.Word命名空间来自动执行此过程。请参阅http://www.codeproject.com/Articles/18703/Word-2007-Automation

您可以在程序中使用Interop.Word,但请记住,可用文档非常稀少。我设法开发我的应用程序,查看例如this one from C-SharpCornerthis one from WindowsDevCenter的示例。即使这些例子比较陈旧,您仍然可以获得主要想法并熟悉语法,然后使用更新版本的Interop.Word(其语法稍简单一些)编写程序。

对于您的情况,您应该创建一个整洁的Word模板,书签位于您的文档中您将插入客户信息的位置。然后,您可以从程序中打开该模板,并在插入从数据库中检索到的信息时使用这些书签进行导航。

还有其他有趣的Interop.Word替代方案,如果您不想深入到Word自动化中,可以尝试使用它,例如DocX(甚至不需要安装Microsoft Word或Office)或者Open XML(生成.docx文件)。

我用Office.Interop组件在过去的这种功能,但这种方法还载有一些明显的缺点:必须在代码运行 的机器上安装

  • 互操作程序集实际上在后台启动Word,因此您必须小心处理所有事情并处理错误,否则最终会导致Word进程浪费主机服务器上的CPU /内存。
  • API使用起来不是很愉快,而且文档有点不足

我也玩过DocXOpen XML,两者都有它们的优点,但与Interop相比,它们往往会受到一定的限制。我的建议是尝试使用DocX或Open XML的功能,如果无法以其他方式实现功能,则只能使用Interop。所有三种API都应该有大量的在线教程。

+0

是否有可能使用DocX构建自定义xml并绑定到数据源? – learning

+0

我不确定我关注,你能详细说明你的意思吗? –

选择该项目。 http://flexdoc.codeplex.com 用flexdoc你不需要安装ms字。我用flexdoc创建word文件。

我已经使用interop和syncfusion来创建报告(虽然我正在生成一个excel报告,但这两种技术也可以用来生成word报告)。我的反馈: -

  1. 虽然互操作包括在其中的Visual Studio(约非视觉工作室的电脑不知道)大多数计算机,互操作的使用需要也可在计算机生成的报告,而syncfusion兼容Microsoft Excel中存在不需要在同一台计算机上存在Microsoft Excel。
  2. 如果您打算使用asp.net,则不支持互操作(至少在我工作时不支持),而支持syncfusion。

链接syncfusion: - http://www.syncfusion.com/products/aspnet/docio

摘要: - 如果你正在开发一个控制台应用程序和服务器(应用程序将要部署)已安装了Microsoft Office,然后互操作可能是一个好主意。否则,你也可以看看syncfusion。

这个article包含可下载的源代码,可以很容易地用来解决您的问题。

Microsoft建议OpenXml适用于在服务器进程中运行的任何应用程序,这种方法可能是减少依赖关系(如其他人所述)的最佳方法之一。这里有一些链接,让你开始:

下载的OpenXML SDK 2.0:http://www.microsoft.com/en-au/download/details.aspx?id=5124

有用的教程:http://msdn.microsoft.com/en-us/library/ff478255.aspx

因此,对于启动切勿使用INTEROP,我一直在使用它在过去4年,我不得不告诉你这不是一个好主意(它真的丢了,你会遇到很多问题,它实际上是写在微软的网站上,你不应该把它用于服务器端的生成)

你应该使用OpenXML SDK,我实际上刚开始使用它,但我不得不说,即使它看起来像ab它更难用,它的速度快很多使用interop和最好的东西是知道我不需要任何程序从办公套件安装在我的电脑上,的缺点是,我可以'笔汇出为PDF或XPS没有了第三方库

你可以在这里找到SDK http://www.microsoft.com/en-us/download/details.aspx?id=30425

我建议您下载该工具以及它非常有用。

这是一个很好的教程,它开始真的帮了我很多。

http://msdn.microsoft.com/en-us/library/office/bb448854.aspx

和U还可以使用从生产力工具的API文档是在同一地点作为SDK

+0

这篇文章可以通过对拼写和语法的一点关注以及较少使用文字说速记来大大改进。 –

我与其他人同意的OpenXML SDK是去的一个好办法相同的原因。我正在创建一个类似于你的报告世代。不幸的是,我需要生成的报告不仅对数据而且对布局都是动态的。

如果你的布局不需要改变,那么我强烈建议使用SDK工具,它可以让你获取任何word文档并生成c#代码,以便重新创建相同的确切文档。从这一点开始,你所要做的就是用你想要的代码中的数据替换文本。 您可以在单词中制作一个通用报告,使用该工具获取代码,然后只需在代码中搜索占位符文本并将该字符串替换为变量即可。它就像text1.text = reportData一样简单;

我还发现SDK工具是学习代码的好方法,您可以并排比较两个文件并查看它们在代码中的差异。

你的答案是OpenXML SDK。

  1. 转到Open XML SDK 2.5 for Microsoft Office
  2. 下载OpenXMLSDKV25和OpenXMLSDKToolV25
  3. 安装SDK和生产力工具
  4. 打开Word并创建模板文件
  5. 开放的Open XML SDK生产力工具
  6. 打开的Word文档
  7. 右键单击文档资源管理器中的文档名称并选择反映代码
  8. 副本生成的所有代码到您的项目
  9. 查找并修改“段落”或“运行”,你想与您的数据

更换您可以USEE免费.NET Word API使用Word 97〜2010生成的报告C#。

 //Create word document 
     Document document = new Document(); 
     document.LoadFromFile(@"..\..\..\..\..\..\Data\Fax.doc"); 

     string[] filedNames = new string[]{"Contact Name","Fax","Date"}; 

     string[] filedValues = new string[]{"John Smith","+1 (69) 123456",System.DateTime.Now.Date.ToString()}; 

     document.MailMerge.Execute(filedNames, filedValues); 

     //Save doc file. 
     document.SaveToFile("Sample.doc", FileFormat.Doc);