[提供源码下载]在大型软件中用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, ref missingValue, ref missingValue,
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);
}
}
步骤四:查看效果,如下图所示:
本文转自yonghu86 51CTO博客,原文链接:http://blog.51cto.com/yonghu/1321337,如需转载请自行联系原作者