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

时间:2013-01-18 06:52:03

标签: c# .net xml ms-word office-automation

我们有一个数据库应用程序,用于存储我们要在Microsoft Word中报告的数据。

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

我想通过使用c#和.Net创建包含内容控件的文档模板来使用Office Word 2010,使用sql作为数据库来替换此模板的内容。

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

10 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可以在程序中使用Interop.Word,但请记住,可用的文档非常缺乏。我设法开发了我的应用程序,查看this one from C-SharpCornerthis one from WindowsDevCenter等示例。即使示例是旧的,您也可以获得主要想法并熟悉语法,然后使用Interop.Word的更新版本编写程序(语法稍微简单一些)。

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

如果您不想深入了解Word自动化,例如DocX(甚至不需要Microsoft Word或Office),您可以尝试其他有趣的替代Interop.Word。已安装)或Open XML(生成.docx文件)。

答案 2 :(得分:1)

我过去曾使用Office.Interop程序集来实现这种功能,但这种方法有一些明显的缺点:

  • 必须在运行代码的计算机上安装Word
  • Interop程序集实际上是在后台启动Word,因此您必须小心处理所有内容并处理错误,否则最终会导致Word进程在主机服务器上浪费CPU /内存
  • API使用起来不是很愉快,而且文档有些缺乏

我还玩DocXOpen XML,两者都有其优点,但与Interop相比往往略有限制。我的建议是使用DocX或Open XML来尝试功能,如果你不能以任何其他方式实现功能,那么只能回到Interop。所有三个API都应该有大量的在线教程。

答案 3 :(得分:1)

检查此项目。 http://flexdoc.codeplex.com 使用flexdoc,您不需要安装ms字。我使用flexdoc创建word文件。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

因此,首先不要使用INTEROP,我已经使用了它过去4年,我必须告诉你它不是一个好主意(它真的丢失了,并且你会遇到很多问题。它实际上写在微软的网站上,你不应该把它用于服务器端生成。

你应该使用OpenXML SDK,我实际上刚刚开始使用它,但我必须说,即使它看起来有点难以使用,它的确定得更快使用互操作,最好的事情是知道我不需要Office套件中的任何程序安装在我的电脑上,的缺点是我可以&#39 ; t导出为PDF或XPS 而不使用第三方库

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

我建议下载该工具,它非常有用。

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

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

您也可以使用生产力工具中的API文档,该工具与sdk位于同一网站

答案 7 :(得分:1)

我同意其他人的观点,OpenXML SDK是一个很好的方法,出于同样的原因。我正在创建一个类似的报告生成中。不幸的是,我需要生成的报告非常动态,不仅有数据,还有布局。

如果您的布局不需要更改,那么我强烈建议您使用SDK工具,它允许您获取任何word文档并生成c#代码,以便您重新创建相同的文档。从那时起,您所要做的就是将文本替换为代码中所需的数据。 您可以用word创建通用报表,使用该工具获取代码,然后只需在代码中搜索占位符文本并用变量替换该字符串。它就像text1.text = reportData;

一样简单

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

答案 8 :(得分:1)

您的答案是OpenXML SDK。

  1. 转到Open XML SDK 2.5 for Microsoft Office
  2. 下载OpenXMLSDKV25和OpenXMLSDKToolV25
  3. 安装sdk和生产力工具
  4. 打开单词并创建模板文档
  5. 打开Open XML SDK Productivity Tool
  6. 打开word文档
  7. 右键单击文档资源管理器中的文档名称,然后选择反映代码
  8. 将所有生成的代码复制到您的项目
  9. 查找并修改要用数据替换的“段落”或“运行”

答案 9 :(得分:0)

您可以使用免费.NET Word API使用c#生成单词97~2010中的报告。

        //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);