亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

ASP.NET中生成Excel遇到的問題及改進方法

2024-07-10 13:25:20
字體:
來源:轉載
供稿:網友
先看一下方法(其中略去了一些判斷和擴展):
生成Excel老代碼

復制代碼 代碼如下:


/// <summary>
/// 將一組對象導出成EXCEL
/// </summary>
/// <typeparam>要導出對象的類型</typeparam>
/// <param>一組對象</param>
/// <param>導出后的文件名</param>
/// <param>列名信息</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();
//根據反射從傳遞進來的屬性名信息得到要顯示的屬性
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";
}
}
//如果沒有找到可用的屬性則結束
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();
}


到這個時候我想應該有朋友能看出來問題所在了。

這個方法生成Excel數據量不大的時候不會出現問題,當數據量變大之后問題就出來了。因為方法里面定義了一個string類型的變量,將需要填充到Excel的內容疊加。對于string類型的數據使用+=操作相當于使用string.Concat方法連接字符串。每當進行一次+=操作的時候就會生成一個新字符串。必然會開辟一塊內存,這樣的操作一多就會把內存耗盡,產生一個OutOfMemoryException。

知道了問題所在,改進起來也很容易,那就是利用StringBuilder疊加需要填充到Excel的內容,改進后的代碼如下:
改進后生成Excel的代碼

復制代碼 代碼如下:


/// <summary>
/// 將一組對象導出成EXCEL
/// </summary>
/// <typeparam>要導出對象的類型</typeparam>
/// <param>一組對象</param>
/// <param>導出后的文件名</param>
/// <param>列名信息</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
StringBuilder excelStr = new StringBuilder(objList.Count * columnInfo.Count);

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

foreach (T obj in objList)
{
foreach (PropertyInfo p in myPro)
{
excelStr.Append(p.GetValue(obj, null)).Append("/t");
}
excelStr.Append("/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();
}
}


在實例化StringBuilder excelStr = new StringBuilder(objList.Count * columnInfo.Count);時候預分配開始大小,這樣能更好的使用StringBuilder。至此,改進完成。
另外,如果您覺得反射會影響性能,那么可以改成表達式樹的方式,或者使用limit。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线性视频日韩欧美| 亚洲视频欧洲视频| 欧美日韩美女在线观看| 欧美激情精品久久久久久久变态| 51色欧美片视频在线观看| 国产精品视频免费观看www| 亚洲国产三级网| 亚洲成av人影院在线观看| 欧美极品少妇xxxxⅹ喷水| 日韩视频在线免费观看| 国产美女高潮久久白浆| 精品无人国产偷自产在线| 日韩专区在线播放| 成人激情免费在线| 亚洲人成欧美中文字幕| 视频一区视频二区国产精品| 国产在线精品一区免费香蕉| 久久久av一区| 欧美日韩xxxxx| 日韩av资源在线播放| 久久久999精品免费| 国产成人精品在线视频| 久久天堂av综合合色| 日韩视频在线免费| 亚洲在线免费观看| 亚洲美女动态图120秒| 国产精品旅馆在线| 国产精品免费福利| 久久精品国产亚洲7777| 欧洲日本亚洲国产区| 亚洲一区二区福利| 97婷婷涩涩精品一区| 国产精品国产三级国产专播精品人| 亚洲精品免费av| 97国产精品视频| 欧美日本国产在线| 国产精品香蕉av| 久精品免费视频| 97视频在线播放| 国产成人一区二区在线| 91久久综合亚洲鲁鲁五月天| 亚洲人成77777在线观看网| 日韩电影在线观看永久视频免费网站| 668精品在线视频| 久久69精品久久久久久久电影好| 久久6精品影院| 久久久精品国产一区二区| 日韩国产精品亚洲а∨天堂免| 日韩中文字幕不卡视频| 91a在线视频| 国产z一区二区三区| 国产国语videosex另类| 98精品在线视频| 红桃av永久久久| 国产精品免费福利| 91av在线免费观看| 亚洲精品日产aⅴ| 国产网站欧美日韩免费精品在线观看| 国产mv免费观看入口亚洲| 欧美中文字幕视频在线观看| 亚洲激情免费观看| 亚洲精品在线不卡| 黑人巨大精品欧美一区二区一视频| 亚洲精品一区在线观看香蕉| 中文字幕久久久av一区| 久久人体大胆视频| 国产欧美一区二区三区在线| 精品国产91久久久久久老师| 亚洲精品天天看| 国产小视频国产精品| 欧美贵妇videos办公室| 日韩精品久久久久久福利| 亚洲999一在线观看www| 亚洲成人激情图| 欧美精品精品精品精品免费| 亚洲天天在线日亚洲洲精| 色综合导航网站| 欧美精品18videos性欧| 日本成人在线视频网址| 国产精品欧美激情| 国产亚洲激情视频在线| 日韩精品在线免费播放| 91中文在线视频| 亚洲免费视频在线观看| 久久精品中文字幕免费mv| 大桥未久av一区二区三区| 日本中文字幕久久看| 欧美一级视频免费在线观看| 国语自产精品视频在免费| 美女久久久久久久久久久| 91产国在线观看动作片喷水| 91精品久久久久久久久中文字幕| 亚洲第一黄色网| 中文字幕免费国产精品| 欧美激情a∨在线视频播放| 欧美日在线观看| 久久久久久久久久亚洲| 奇米一区二区三区四区久久| 中文字幕亚洲欧美日韩2019| 欧美日韩国产丝袜另类| 亚洲日本成人网| 久久久久久久色| 日韩在线视频观看| 精品色蜜蜜精品视频在线观看| 成人黄色在线观看| 北条麻妃一区二区在线观看| 91国自产精品中文字幕亚洲| 欧美激情视频在线| 亚洲九九九在线观看| 国产成人一区二区三区电影| 5566成人精品视频免费| 亚洲国产精品推荐| 久久久久久成人| 国产日韩欧美视频| 亚洲色图av在线| 欧美视频国产精品| 国产一区二区三区视频| 欧美日韩在线影院| 国产精品亚洲综合天堂夜夜| 日韩av色综合| 国产精品1区2区在线观看| 91精品久久久久久久久青青| 国产精品h在线观看| 国产性猛交xxxx免费看久久| 另类视频在线观看| 久久久久久久久久国产| yw.139尤物在线精品视频| 亚洲欧美国产精品va在线观看| 亚洲黄页网在线观看| 日韩成人在线视频观看| 国产精品免费久久久| 国产精品丝袜白浆摸在线| 亚洲人成在线观看网站高清| 26uuu另类亚洲欧美日本老年| 一区二区日韩精品| 国产香蕉一区二区三区在线视频| 亚洲精品v欧美精品v日韩精品| 蜜月aⅴ免费一区二区三区| www.午夜精品| 国产一区二区三区四区福利| 日韩精品久久久久久福利| 国产丝袜一区视频在线观看| 亚洲国产成人在线视频| 成人做爽爽免费视频| 久久亚洲一区二区三区四区五区高| 国产啪精品视频网站| 成人伊人精品色xxxx视频| 国产精品久久久久久久久久尿| www.欧美免费| 亚洲欧美色图片| 日韩欧美亚洲国产一区| 亚洲欧洲在线观看| 性欧美xxxx视频在线观看| 国模私拍一区二区三区| 国产免费一区二区三区在线能观看| 国产精品视频白浆免费视频| 97视频在线播放| 国产精品久久久久999| 国产精品一区二区久久久| 91在线观看免费观看| 国产午夜精品视频免费不卡69堂| 亚洲午夜精品久久久久久性色| 欧美丝袜美女中出在线| 九九九热精品免费视频观看网站|