天天看点

[提供源码下载]在大型软件中用Word做报表:书签的应用(提供一种思路)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinahuyong/article/details/6714019

[提供源码下载]在大型软件中用Word做报表:

书签的应用(提供一种思路)

——通过知识共享树立个人品牌。

报表基本上在每一个项目中占有很大的比例,做报表也是我们开发人员必须过的坎,现在市面上各种类型的报表,我们到底应该如何选择呢?每一种报表都有他自己优秀的一面,我在项目开发中,一般用Grid++Report做报表,对于复杂的,量大的也用Excel和Word来做,大家也可以分享一下你们在项目中用到的报表软件!

现在有这样一个需求,比如有一个几十页的合同(合同内容每年会有所不同),合同中要填的数据(如:甲方、乙方什么的)从数据库中得到,各个页都有可能填写相关数据,最后生成合同打印出来,对于这样的需求,我想要用水晶报表等来做相当麻烦。

本文给大家提供一种思路,就是用Word来做这种类型的报表,具体来说,就是用“书签”定位到Word中要填数据的地方,然后把数据填上去,再把word导出来,灵活应用,以不变应万变。

下面来看具体操作。

步骤一:准备好Word合同模板,在需要填写数据的地方插入书签(不明白的,可以下载源码后自己慢慢看)后保存应模板文件,如下图:

步骤二:新建一个WinForm项目,添加Word的Dll引用,如下图:

步骤三:编写代码,把相关数据写入到书签中,代码如下:

private void btnWriteDataToWord_Click(object sender, EventArgs e)

{

object missingValue = System.Reflection.Missing.Value;

object fileName = System.Windows.Forms.Application.StartupPath + "\\Test.doc";

if (System.IO.File.Exists(fileName as string))

{

object myTrue = false;

Microsoft.Office.Interop.Word.Application oWord = new Microsoft.Office.Interop.Word.ApplicationClass();

Microsoft.Office.Interop.Word.Document oDoc;

oDoc = oWord.Documents.Open(ref fileName, ref missingValue, ref myTrue,

ref missingValue, ref missingValue, ref missingValue,

ref missingValue);

MessageBox.Show(oDoc.Bookmarks.Count.ToString()); //得到word中的所有书签个数

//写入Word文档

object[] oBookMarks = { "出让方名称", "出让方通讯地址", "出让方邮政编码" };//Word中的书签

string[] sValues = { "测试出让方名称", "测试出让方通讯地址43号", "测试出让方邮政编码432123" }; //给书签的值

for (int iTemp = 0; iTemp < oBookMarks.Length; iTemp++)

Microsoft.Office.Interop.Word.Range tmpRng = oWord.ActiveDocument.Bookmarks.get_Item(ref oBookMarks[iTemp]).Range;

tmpRng.Text = sValues[iTemp].ToString(); //通过tmpRng.Text还可以得到标签处的数据,在这儿是设置它的数据

object oRng = tmpRng;

oDoc.Bookmarks.Add(oBookMarks[iTemp].ToString(), ref oRng);

}

object bSaveChange = true;

//如果"D:\Word"目录不存在,就创建

if (!Directory.Exists("D:\\Word"))

Directory.CreateDirectory("D:\\Word"); //创建目录

string guid = System.Guid.NewGuid().ToString();

object sFileName = @"D:/Word/出让合同" + guid + ".doc";

//把写好的合同另存为

if (oDoc.SaveFormat == (int)Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatDocument)

oDoc.SaveAs(ref sFileName, ref missingValue, ref myTrue,

ref missingValue);

oDoc.Close(ref bSaveChange, ref missingValue, ref missingValue);

oWord.Quit(ref bSaveChange, ref missingValue, ref missingValue);

else

MessageBox.Show("合同模板不存在!");

return;

//object tmp = "msr_01";

//Word.Range tmpRng = oWord.ActiveDocument.Bookmarks.get_Item(ref tmp).Range;

//tmpRng.Text = "China";

////由于附值以后书签自动消除,为了以后便于修改,需要把书签再自动生成一个

//object oRng = tmpRng;

//oDoc.Bookmarks.Add(tmp.ToString(), ref oRng);

//object bSaveChange = true;

//oDoc.Close(ref bSaveChange, ref missingValue, ref missingValue);

步骤四:查看效果,如下图所示:

源码下载

(下载前请评论与推荐下,感谢)

本文只是提供一种解决问题的思路,欢迎大家拍砖,也分享一下你们的经验。

© 2011

EricHu

原创作品,转贴请注明作者和出处,留此信息。

------------------------------------------------

cnBlobs:

http://www.cnblogs.com/huyong/

CSDN:

http://blog.csdn.net/chinahuyong

作者:EricHu(DB、C\S、B\S、WebService、WCF、PM等)

出处:

Q Q:80368704 E-Mail: [email protected]

本博文欢迎大家浏览和转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,在『参考』的文章中,我会表明参考的文章来源,尊重他人版权。若您发现我侵犯了您的版权,请及时与我联系。

更多文章请看

[置顶]索引贴——(不断更新中)