假设所有客户的信息都存储在数据库系统中,现在要求我创建数百个单词信函、报告,将发送给我的客户。这些信件具有相同的内容,但是客户名称、客户地址等不同。
我希望利用Office Word 2010通过使用C#和.Net、SQL作为数据库创建文档模板并使用内容控件来替换此模板的内容。
我一直在寻找关于在C#和.Net以及SQL中自动化Word 2010的文章。有人能给我指点方向吗?
您可以在程序中使用Interop.Word,但请注意可用文档非常有限。我成功地开发了我的应用程序,查看了一些示例,例如C-SharpCorner或WindowsDevCenter。即使这些示例很旧,您也可以获得主要思路并熟悉语法,然后使用更新版本的Interop.Word(其语法略微简单)编写程序。
在您的情况下,您应该创建一个整洁的Word模板,在文档中插入客户信息的位置放置书签。然后,您可以从程序中打开模板,并使用这些书签导航,将从数据库检索到的信息插入其中。
如果您不想深入了解Word自动化,还有其他有趣的替代方案可供尝试,例如DocX(甚至不需要安装Microsoft Word或Office)或Open XML(用于生成.docx文件)。
微软建议在服务器进程中运行的任何应用程序都使用OpenXml,这种方法可能是减少依赖性的最佳方法之一(正如其他人所提到的)。以下是一些入门链接:
下载OpenXml SDK 2.0:http://www.microsoft.com/en-au/download/details.aspx?id=5124
因此,首先不要使用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位于同一网站上。
您的答案是OpenXML SDK。
我曾经使用过Interop和Syncfusion来创建报告(虽然我生成的是Excel报告,但这两种技术也可以用于生成Word报告)。我的反馈意见如下:
Syncfusion链接: http://www.syncfusion.com/products/aspnet/docio
总结:如果您正在开发控制台应用程序,并且服务器(应用程序将部署到该服务器)已安装Microsoft Office,则Interop可能是一个不错的选择。否则,您也可以看看Syncfusion。
您可以使用免费的.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);