天天看點

[提供源碼下載下傳]在大型軟體中用Word做報表:書簽的應用(提供一種思路)

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