如何使用C#,.net,Word模板和XML在Word 2010中生成报告

6
我们有一个数据库应用程序,存储了我们想要在Microsoft Word中报告的数据。
假设所有客户的信息都存储在数据库系统中,现在要求我创建数百个单词信函、报告,将发送给我的客户。这些信件具有相同的内容,但是客户名称、客户地址等不同。
我希望利用Office Word 2010通过使用C#和.Net、SQL作为数据库创建文档模板并使用内容控件来替换此模板的内容。
我一直在寻找关于在C#和.Net以及SQL中自动化Word 2010的文章。有人能给我指点方向吗?

1
查看https://dev59.com/z1vUa4cB1Zd3GeqPqytB。在ASP.NET应用程序中不支持使用Office自动化,通常也无法正常工作。 - John Saunders
我曾经使用Interop.Word命名空间来自动化这个过程。请参见http://www.codeproject.com/Articles/18703/Word-2007-Automation。 - Alex
1
问题没有标记ASP.NET,也没有在正文中提到它。 - Emyr
1
这不是在呼喊着“使用Word的串联信函功能”吗? - Thorsten Dittmar
检查这个项目。http://flexdoc.codeplex.com 使用flexdoc,您不需要安装MS Word即可创建Word文件。我用flexdoc创建了Word文件。 - seleucia
这篇文章包含可下载的源代码,可以轻松解决您的问题。 - metalheart
8个回答

1

您可以在程序中使用Interop.Word,但请注意可用文档非常有限。我成功地开发了我的应用程序,查看了一些示例,例如C-SharpCornerWindowsDevCenter。即使这些示例很旧,您也可以获得主要思路并熟悉语法,然后使用更新版本的Interop.Word(其语法略微简单)编写程序。

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

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


1

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

  • 必须在运行代码的机器上安装Word
  • Interop程序集实际上会在后台启动Word,因此您必须小心地处理所有内容并处理错误,否则您将在主机服务器上浪费CPU/内存的Word进程
  • API不太好用,文档也比较稀少

我还尝试过DocXOpen XML,它们都有其优点,但与Interop相比稍微有些局限性。我的建议是尝试使用DocX或Open XML实现功能,如果无法通过其他方式实现功能,则退而求其次使用Interop。在线上应该有足够的教程来介绍这三个API。


DocX是否有可能构建自定义XML并将其绑定到数据源? - learning
我不确定我理解了,你能详细说明一下你的意思吗? - Henry Wilson

1

1

因此,首先不要使用Interop,我已经使用了4年,必须告诉你这不是一个好主意(它真的很失控,你会遇到很多问题)。实际上,微软网站上有写明,不应将其用于服务器端生成。

应该使用OpenXML SDK,尽管它似乎更难使用,但我必须说,它绝对比使用Interop快得多,最好的事情是,现在我不需要安装Office套件中的任何程序在我的电脑上,缺点是我不能再导出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位于同一网站上。


这篇文章如果稍微注意一下拼写和语法,减少使用文本快捷方式的话,会有很大提升。 - Henry Wilson

1
我同意其他人的看法,OpenXML SDK是一个很好的选择。我正在创建一种类似于你的报告生成。不幸的是,我需要生成的报告非常动态,不仅包括数据,还包括布局。
如果你的布局不需要改变,那么我强烈建议使用SDK工具。它可以让你获取任何Word文档并为你生成相同的C#代码。从那时起,你只需要在代码中用数据替换文本即可。
你可以在Word中创建一个通用报告,使用该工具获取代码,然后在代码中搜索占位符文本并将该字符串替换为变量。这就像text1.text = reportData一样简单。
我也发现SDK工具是学习代码的好方法,你可以并排比较两个文件并查看它们在代码中的区别。

1

您的答案是OpenXML SDK。

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

0

我曾经使用过Interop和Syncfusion来创建报告(虽然我生成的是Excel报告,但这两种技术也可以用于生成Word报告)。我的反馈意见如下:

  1. 虽然Interop包含在大多数安装了Visual Studio的计算机中(不确定非Visual Studio计算机是否也有),但使用Interop需要在生成报告的计算机上也安装兼容的Microsoft Excel,而Syncfusion则不需要在同一台计算机上安装Microsoft Excel。
  2. 如果您计划使用ASP.NET,则不支持Interop(至少在我工作时不支持),而支持Syncfusion。

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

总结:如果您正在开发控制台应用程序,并且服务器(应用程序将部署到该服务器)已安装Microsoft Office,则Interop可能是一个不错的选择。否则,您也可以看看Syncfusion。


0

您可以使用免费的.NET Word API来在C#中生成Word 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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接