轉(zhuǎn)帖|其它|編輯:郝浩|2011-10-25 13:59:13.000|閱讀 779 次
概述:本文主要介紹如何利用使用C#和Excel進(jìn)行報(bào)表開發(fā),希望對大家有幫助。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
目前的商業(yè)工具如水晶報(bào)表,ActiveReport等,都提供了靈活,強(qiáng)大的功能,但是對于比較特殊化的表格,特別是國內(nèi)的一些應(yīng)用,都是一個(gè)個(gè)的格子組成的,這樣要是用線來一根根畫就比較麻煩,但是這類工具還都不提供表格化的報(bào)表布局定義方式。一個(gè)很好的選擇是VS2005的客戶端報(bào)表(RDLC),但是在某幾個(gè)方面還是不夠靈活,例如,靈活性有限制,要想自己編碼實(shí)現(xiàn)一些復(fù)雜邏輯還是有困難;要VS2005,對于一些還在使用VS2003的項(xiàng)目就只有眼饞的份了。用Excel來實(shí)現(xiàn),優(yōu)點(diǎn)在于頁面布局設(shè)計(jì)靈活,同時(shí)使用代碼來操作數(shù)據(jù)要更靈活,更精確。
下面是一個(gè)簡單的例子,打開一個(gè)定義好的Excel文件,這個(gè)文件是作為報(bào)表的模板,然后向模板的指定格子里填充數(shù)據(jù),形成一個(gè)報(bào)表,在web方式下可以按照指定的命名方式在服務(wù)器上生成一個(gè)excel文件,之后傳送到客戶端,由客戶端啟動(dòng)excel進(jìn)行打印。
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",
"漢", "按時(shí) ?放奧斯丁奧斯丁非是否奧斯丁非" };
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要進(jìn)行一部分的編碼,好在這部分還不太復(fù)雜,但是最大的問題就在于當(dāng)報(bào)表需求變更時(shí),要重新編譯部署,而且當(dāng)格子特別多的時(shí)候,要這樣硬編碼還是挺痛苦的一件事。不過使用Excel畢竟給我們提供了一種選擇,可以在開發(fā)時(shí)對多種方案權(quán)衡利弊,使用最適合項(xiàng)目的。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:博客園