作者針對VS2003報表的一些注意事項進行簡述
由于VS2003 報表種類太多了,所以此處無法上傳,所以大家有communitysever的可以從里面獲得然后反編譯為自己所用,沒有的就到網絡上搜下吧,有許多資源呢!論壇上也有的。
對于VS2003 報表的表格,特別是國內的一些應用,都是一個個的格子組成的,這樣要是用線來一根根畫就比較麻煩,但是這類工具還都不提供表格化的報表布局定義方式。苦悶啊!#t#
一個很好的選擇是VS2005的客戶端報表(RDLC),但是在某幾個方面還是不夠靈活,例如,靈活性有限制,要想自己編碼實現一些復雜邏輯還是有困難;要VS2005,對于一些還在使用VS2003的項目就只有眼饞的份了。用Excel來實現,優點在于頁面布局設計靈活,同時使用代碼來操作數據要更靈活,更精確。
下面是一個簡單的例子,打開一個定義好的Excel文件,這個文件是作為報表的模板,然后向模板的指定格子里填充數據,形成一個報表,在web方式下可以按照指定的命名方式在服務器上生成一個excel文件,之后傳送到客戶端,由客戶端啟動excel進行打印。
- 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要進行一部分的編碼,好在這部分還不太復雜,但是***的問題就在于當報表需求變更時,要重新編譯部署,而且當格子特別多的時候,要這樣硬編碼還是挺痛苦的一件事。不過使用Excel畢竟給我們提供了一種選擇,可以在開發時對多種方案權衡利弊,使用最適合項目的。下面的代碼使用一個現有的統計圖Excel文件,加載這個文件,設置某一項的值和統計圖的表示方式,然后保存到另一個Excel文件里。如果是VS2003Office2003,也可以選擇VS2003 報表。
下面的代碼說明如何一個Sheet上的選定內容拷貝到另一個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);