轉帖|其它|編輯:郝浩|2011-10-25 13:59:13.000|閱讀 779 次
概述:本文主要介紹如何利用使用C#和Excel進行報表開發,希望對大家有幫助。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
目前的商業工具如水晶報表,ActiveReport等,都提供了靈活,強大的功能,但是對于比較特殊化的表格,特別是國內的一些應用,都是一個個的格子組成的,這樣要是用線來一根根畫就比較麻煩,但是這類工具還都不提供表格化的報表布局定義方式。一個很好的選擇是VS2005的客戶端報表(RDLC),但是在某幾個方面還是不夠靈活,例如,靈活性有限制,要想自己編碼實現一些復雜邏輯還是有困難;要VS2005,對于一些還在使用VS2003的項目就只有眼饞的份了。用Excel來實現,優點在于頁面布局設計靈活,同時使用代碼來操作數據要更靈活,更精確。
下面是一個簡單的例子,打開一個定義好的Excel文件,這個文件是作為報表的模板,然后向模板的指定格子里填充數據,形成一個報表,在web方式下可以按照指定的命名方式在服務器上生成一個excel文件,之后傳送到客戶端,由客戶端啟動excel進行打印。
Excel.Application m_objExcel = null;
Excel._Workbook m_objBook = null;
Excel.Sheets m_objSheets = null;
Excel._Worksheet m_objSheet = null;
Excel.Range m_objRange = null;
object m_objOpt = System.Reflection.Missing.Value;
try
{
m_objExcel = new Excel.Application();
m_objBook = m_objExcel.Workbooks.Open
("z:\\Book1.xls", m_objOpt, m_objOpt, m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt);
m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
string[] info = new string[5] { "Cure", "26", "dahuzizyd.cnblogs.com",
"漢", "按時 ?放奧斯丁奧斯丁非是否奧斯丁非" };
m_objRange = m_objSheet.get_Range("B1", m_objOpt);
m_objRange.Value = info[0];
m_objRange = m_objSheet.get_Range("E1", m_objOpt);
m_objRange.Value = info[1];
m_objRange = m_objSheet.get_Range("B2", m_objOpt);
m_objRange.Value = info[2];
m_objRange = m_objSheet.get_Range("E2", m_objOpt);
m_objRange.Value = info[3];
m_objRange = m_objSheet.get_Range("A3", m_objOpt);
m_objRange.Value = info[4];
m_objExcel.DisplayAlerts = false;
m_objBook.SaveAs("z:\\Book2.xls", m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange,
m_objOpt, m_objOpt, m_objOpt, m_objOpt);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
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畢竟給我們提供了一種選擇,可以在開發時對多種方案權衡利弊,使用最適合項目的。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客園