作者針對(duì)VS2003報(bào)表的一些注意事項(xiàng)進(jìn)行簡(jiǎn)述
由于VS2003 報(bào)表種類(lèi)太多了,所以此處無(wú)法上傳,所以大家有communitysever的可以從里面獲得然后反編譯為自己所用,沒(méi)有的就到網(wǎng)絡(luò)上搜下吧,有許多資源呢!論壇上也有的。
對(duì)于VS2003 報(bào)表的表格,特別是國(guó)內(nèi)的一些應(yīng)用,都是一個(gè)個(gè)的格子組成的,這樣要是用線來(lái)一根根畫(huà)就比較麻煩,但是這類(lèi)工具還都不提供表格化的報(bào)表布局定義方式。苦悶??!#t#
一個(gè)很好的選擇是VS2005的客戶端報(bào)表(RDLC),但是在某幾個(gè)方面還是不夠靈活,例如,靈活性有限制,要想自己編碼實(shí)現(xiàn)一些復(fù)雜邏輯還是有困難;要VS2005,對(duì)于一些還在使用VS2003的項(xiàng)目就只有眼饞的份了。用Excel來(lái)實(shí)現(xiàn),優(yōu)點(diǎn)在于頁(yè)面布局設(shè)計(jì)靈活,同時(shí)使用代碼來(lái)操作數(shù)據(jù)要更靈活,更精確。
下面是一個(gè)簡(jiǎn)單的例子,打開(kāi)一個(gè)定義好的Excel文件,這個(gè)文件是作為報(bào)表的模板,然后向模板的指定格子里填充數(shù)據(jù),形成一個(gè)報(bào)表,在web方式下可以按照指定的命名方式在服務(wù)器上生成一個(gè)excel文件,之后傳送到客戶端,由客戶端啟動(dòng)excel進(jìn)行打印。
- finally
- {
- m_objBook.Close(m_objOpt, m_objOpt, m_objOpt);
- m_objExcel.Workbooks.Close();
- m_objExcel.Quit();
- System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objBook);
- System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objExcel);
- m_objBook = null;
- m_objExcel = null;
- GC.Collect();
- }
可以看到,使用Excel要進(jìn)行一部分的編碼,好在這部分還不太復(fù)雜,但是***的問(wèn)題就在于當(dāng)報(bào)表需求變更時(shí),要重新編譯部署,而且當(dāng)格子特別多的時(shí)候,要這樣硬編碼還是挺痛苦的一件事。不過(guò)使用Excel畢竟給我們提供了一種選擇,可以在開(kāi)發(fā)時(shí)對(duì)多種方案權(quán)衡利弊,使用最適合項(xiàng)目的。下面的代碼使用一個(gè)現(xiàn)有的統(tǒng)計(jì)圖Excel文件,加載這個(gè)文件,設(shè)置某一項(xiàng)的值和統(tǒng)計(jì)圖的表示方式,然后保存到另一個(gè)Excel文件里。如果是VS2003Office2003,也可以選擇VS2003 報(bào)表。
下面的代碼說(shuō)明如何一個(gè)Sheet上的選定內(nèi)容拷貝到另一個(gè)Sheet
- ThisApplication.DisplayAlerts = false;
- xlSheet = (Excel.Worksheet)ThisWorkbook.Worksheets.get_Item(1);
- //Excel.Range range = xlSheet.get_Range("G4",Type.Missing);
- Excel.Range range = (Excel.Range)xlSheet.Rows.get_Item(18, Type.Missing);
- Excel.Range range1 = (Excel.Range)xlSheet.Rows.get_Item(19, Type.Missing);
- range.Value = "123";
- range.Copy(range1);
- range1.Rows.Insert(XlInsertShiftDirection.xlShiftDown);






