欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#從實(shí)體對(duì)象集合中導(dǎo)出Excel的代碼

 更新時(shí)間:2008年08月26日 08:46:04   作者:  
數(shù)據(jù)的導(dǎo)出是項(xiàng)目中經(jīng)常要實(shí)現(xiàn)的功能,就拿最常見(jiàn)的要導(dǎo)出成Excel來(lái)說(shuō),網(wǎng)上看來(lái)看去,都是介紹從Datatable中導(dǎo)出
或是將Datagrid或是Gridview的輸出導(dǎo)出,實(shí)現(xiàn)大體上又分為調(diào)用COM+組件或是利用Response(當(dāng)然是B/S架構(gòu)的項(xiàng)目)的輸出來(lái)做,COM+組件的方式以前在項(xiàng)目中也應(yīng)用過(guò),但說(shuō)實(shí)話感覺(jué)效果并不好,一是布署很麻煩,二是當(dāng)時(shí)記得好像WEB服務(wù)器端的有個(gè)進(jìn)程老關(guān)不掉,并且還有個(gè)問(wèn)題是服務(wù)器端安裝的EXCEL版本的不同,在程序中調(diào)用的方法傳入的參數(shù)個(gè)數(shù)都不相同,真是夠郁悶的,但是好處是這種方式當(dāng)然是最靈活的。

我們還是以一個(gè)B/S架構(gòu)的項(xiàng)目應(yīng)用來(lái)說(shuō)說(shuō)導(dǎo)出吧,通用一點(diǎn)兒的還是從數(shù)據(jù)集往外導(dǎo)出吧,畢竟將Gridview的輸出導(dǎo)出來(lái)這種方式個(gè)人感覺(jué)適用性不高,因?yàn)榇蟛糠智闆r我們的頁(yè)面中的運(yùn)用Gridview都是要牽扯分頁(yè)的,我們還是直接來(lái)做從數(shù)據(jù)集往外導(dǎo)吧,從DataTable往外導(dǎo)網(wǎng)上很多現(xiàn)成的,但是運(yùn)用在一個(gè)嚴(yán)格分層架構(gòu)的項(xiàng)目中,還是會(huì)有些不爽的,假如我們嚴(yán)格要求我們的項(xiàng)目是標(biāo)準(zhǔn)的三層架構(gòu),我們層與層之間傳遞的是我們的實(shí)體對(duì)象,我們不傳遞DataTable這種弱類(lèi)型的東東,那我們導(dǎo)出的數(shù)據(jù)源就只能是實(shí)體對(duì)象集合了,于是,我們需要寫(xiě)一個(gè)以實(shí)體對(duì)象為數(shù)據(jù)源的導(dǎo)出方法,感覺(jué)還是不太完美,比如在參數(shù)中“導(dǎo)出列信息”參數(shù)的設(shè)計(jì),感覺(jué)還有更好的方式,呵呵,以后有空再想吧!

貼出我的實(shí)現(xiàn),大家也幫忙看看!
復(fù)制代碼 代碼如下:


/// <summary>
/// 將一組對(duì)象導(dǎo)出成EXCEL
/// </summary>
/// <typeparam name="T">要導(dǎo)出對(duì)象的類(lèi)型</typeparam>
/// <param name="objList">一組對(duì)象</param>
/// <param name="FileName">導(dǎo)出后的文件名</param>
/// <param name="columnInfo">列名信息</param>
public static void ExExcel<T>(List<T> objList, string FileName, Dictionary<string, string> columnInfo)
{

if (columnInfo.Count == 0) { return; }
if (objList.Count == 0) { return; }
//生成EXCEL的HTML
string excelStr = "";

Type myType = objList[0].GetType();
//根據(jù)反射從傳遞進(jìn)來(lái)的屬性名信息得到要顯示的屬性
List<PropertyInfo> myPro = new List<PropertyInfo>();
foreach (string cName in columnInfo.Keys)
{
PropertyInfo p = myType.GetProperty(cName);
if (p != null)
{
myPro.Add(p);
excelStr += columnInfo[cName] + "\t";
}
}
//如果沒(méi)有找到可用的屬性則結(jié)束
if (myPro.Count == 0) { return; }
excelStr += "\n";

foreach (T obj in objList)
{
foreach (PropertyInfo p in myPro)
{
excelStr += p.GetValue(obj, null)+"\t";
}
excelStr += "\n";
}

//輸出EXCEL
HttpResponse rs = System.Web.HttpContext.Current.Response;
rs.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
rs.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);
rs.ContentType = "application/ms-excel";
rs.Write(excelStr);
rs.End();
}

相關(guān)文章

最新評(píng)論