仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 706|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET网页设计ASP.NET中天生Excel碰到的成绩及改善方...

[复制链接]
透明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:20:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
就安全性而言,Java已经远远低于VB.NET,更无法与安全性著称的C#相比。先看一下办法(个中略往了一些判别和扩大):
天生Excel老代码
复制代码代码以下:
///<summary>
///将一组工具导出成EXCEL
///</summary>
///<typeparamname="T">要导出工具的范例</typeparam>
///<paramname="objList">一组工具</param>
///<paramname="FileName">导出后的文件名</param>
///<paramname="columnInfo">列名信息</param>
publicstaticvoidExExcel<T>(List<T>objList,stringFileName,Dictionary<string,string>columnInfo)
{

if(columnInfo.Count==0){return;}
if(objList.Count==0){return;}
//天生EXCEL的HTML
stringexcelStr="";

TypemyType=objList[0].GetType();
//依据反射从传送出去的属性名信息失掉要显现的属性
List<PropertyInfo>myPro=newList<PropertyInfo>();
foreach(stringcNameincolumnInfo.Keys)
{
PropertyInfop=myType.GetProperty(cName);
if(p!=null)
{
myPro.Add(p);
excelStr+=columnInfo[cName]+"        ";
}
}
//假如没有找到可用的属性则停止
if(myPro.Count==0){return;}
excelStr+="
";

foreach(TobjinobjList)
{
foreach(PropertyInfopinmyPro)
{
excelStr+=p.GetValue(obj,null)+"        ";
}
excelStr+="
";
}

//输入EXCEL
HttpResponsers=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>
///<typeparamname="T">要导出工具的范例</typeparam>
///<paramname="objList">一组工具</param>
///<paramname="FileName">导出后的文件名</param>
///<paramname="columnInfo">列名信息</param>
publicstaticvoidExExcel<T>(List<T>objList,stringFileName,Dictionary<string,string>columnInfo)
{

if(columnInfo.Count==0){return;}
if(objList.Count==0){return;}
//天生EXCEL的HTML
StringBuilderexcelStr=newStringBuilder(objList.Count*columnInfo.Count);

TypemyType=objList[0].GetType();
//依据反射从传送出去的属性名信息失掉要显现的属性
List<PropertyInfo>myPro=newList<PropertyInfo>();
foreach(stringcNameincolumnInfo.Keys)
{
PropertyInfop=myType.GetProperty(cName);
if(p!=null)
{
myPro.Add(p);
excelStr.Append(columnInfo[cName]).Append("        ");
}
}
//假如没有找到可用的属性则停止
if(myPro.Count==0){return;}
excelStr.Append("
");

foreach(TobjinobjList)
{
foreach(PropertyInfopinmyPro)
{
excelStr.Append(p.GetValue(obj,null)).Append("        ");
}
excelStr.Append("
");
}

//输入EXCEL
HttpResponsers=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();
}
}

在实例化StringBuilderexcelStr=newStringBuilder(objList.Count*columnInfo.Count);时分预分派入手下手巨细,如许能更好的利用StringBuilder。至此,改善完成。
别的,假如您以为反射会影响功能,那末能够改成表达式树的体例,大概利用limit。据说很厉害,甚至可以把C#也干掉^_^,不过也很复杂,本来C++已经够复杂的。有人甚至还提出把这个东东引进标准,我觉得基本上不可能的。
飘飘悠悠 该用户已被删除
沙发
发表于 2015-1-19 08:53:57 | 只看该作者
asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!
老尸 该用户已被删除
板凳
发表于 2015-1-25 21:00:42 | 只看该作者
网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
活着的死人 该用户已被删除
地板
发表于 2015-2-4 03:51:27 | 只看该作者
Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。
透明 该用户已被删除
5#
 楼主| 发表于 2015-2-9 14:56:03 | 只看该作者
提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。
爱飞 该用户已被删除
6#
发表于 2015-2-27 08:37:57 | 只看该作者
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
乐观 该用户已被删除
7#
发表于 2015-3-9 00:10:00 | 只看该作者
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
冷月葬花魂 该用户已被删除
8#
发表于 2015-3-16 19:20:31 | 只看该作者
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
飘灵儿 该用户已被删除
9#
发表于 2015-3-23 00:19:42 | 只看该作者
如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 07:55

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表