[提供源碼下載下傳]在大型軟體中用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,如需轉載請自行聯系原作者