ASP.NET中数据导出到Excel的研究

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:wei370210524
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:本文就ASP.Net中数据导出至Excel的实现方法进行讨论,然后提出一个通用的数据导出类。该类以函数的形式提供数据导出功能,且易扩展,可以很方便地复用。
  关键词:数据导出;数据网格控件;网格视图控件
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)12-21483-01
  
  Study on Exporting Data to Excel in ASP.NET
  
  CHAI Xiao-hui
  (Department of Computer Science,Shangqiu Teachers College,Shangqiu 476000,China)
  Abstract:This article discussed how to export the data to excel in ASP.NET, the class we propose for the Export to Excel are not linked to the backend structure and can be re-used across projects for the common functionality provided.
  Key words:Data Export;DataGrid Control;GridView Control
  
  1 引言
  
  在我们的研究生管理信息系统中,经常需要进行数据的导出操作,如学生学习计划、成绩单、各种统计报表等,其中最常用的就是把处理后的数据导出至Excel。格式要求的多样化给程序的实现带来了很大困难。为了解决这个问题,我们进行了较深入的研究,并提出了一种比较通用的解决方法,该方法不拘于具体背景,几乎不加任何修改即可直接使用。
  
  2 问题研究
  
  在研究生管理系统中,我们原来的数据导出解决方法主要分为两种:
  (1)无模板的数据导出:该类数据通常比较单一,不要求进行很多的数据统计工作。实现时采用通用的导出方法。首先处理标题信息,然后从数据控件中依次取出每一行中的数据,填充到对应的Excel单元格中。这种实现方法比较简单,本文不再讨论。
  (2)有模板的数据导出:该类数据通常包含各种统计信息,并且要求按照特定的格式导出,而这些格式如果使用第一种方法太多繁琐,需要编写大量的控制代码来指定标题信息和各单元格的实际数据。下面对该问题进行分析。
  由于格式要求不一,为了减少程序的工作量,我们原来的解决办法是把要求的格式固定为模板来保存,然后对每一个模板都编写相应的导出方法来实现。如图1所示为招生模块中一志愿上线统计报表的格式:
  
  图1
  解决方法:以DataGrid控件为例,设控件名称为dg_1,数据通过Dataset数据源进行绑定。导出数据时,首先利用.xlt格式的模板文件取得格式信息,然后从Dataset中取出数据进行直接导出,完成后保存为.xls格式。参考代码如下:
  string path = getPath();
  string bookpath = path + filename + ".xlt";
  //取得模板文件的路径及名称
  string savepath = path + filename + ".xls";
  Excel.Application objExcel;
  objExcel = new Excel.Application();
  objExcel.Workbooks.Add(bookpath);
  Excel.Worksheet objSheet;
  objSheet = (Excel.Worksheet)(objExcel.Workbooks[1].Worksheets[1]);
  HttpResponse response = HttpContext.Current.Response; 
  for(i = 0;i<hang;i++)
  {for(j = 0;j<lie;j++)
  {//导出实际数据至对应单元格
  objSheet.Cells[i+6,j+1] = y_Ds.Tables[0].Rows[i][j].ToString().Trim();}}
  objSheet.SaveAs(savepath); …
  该方法虽然可以减少不用再每次指定标题等各种格式信息,但是由于实现时仍然需要指定各单元格对应的填充数据,所以工作量仍然很大。另外,类似研究生学习计划的数据每次只需导出一页(每个学生),而类似一志愿上线统计等的报表则一次就要求导出全部的数据。如果能够根据数据控件直接导出至Excel,不再一一指定行中各字段对应的Excel单元格,则可以很方便地进行导出操作。
  
  3 解决方法
  
  为了描述方便,给定图2所示的导出文件格式,然后分别以DataGrid控件和GridView控件实现数据导出功能。
  
  图2
  3.1实现方法:
  对于DataGrid控件,为了生成图2所示的标题格式,需要采用代码动态生成标题。需要在控件的ItemCreated事件中添加如下代码:
  if (e.Item.ItemType == ListItemType.Header)
  { TableCellCollection Tcc = e.Item.Cells;
  Tcc.Clear();
  Tcc.Add(new TableHeaderCell());
  Tcc[0].RowSpan = 2;
  Tcc[0].Text = "员工编号";
  Tcc.Add(new TableHeaderCell());
  Tcc[1].ColumnSpan = 2;
  Tcc[1].Text = "员工姓名</td>";
  Tcc[1].Text += "<td rowspan='2'  align='center' style='FONT-WEIGHT:bold;'>部门编号</td><td rowspan='2'  align='center' style='FONT-WEIGHT:bold;'>薪水</td><td rowspan='2'  align='center' style='FONT-WEIGHT:bold;'>雇佣日期</td></tr>";
  Tcc[1].Text += "<tr  align='center' style='FONT-WEIGHT:bold;'><td>LastName</td><td> FirstName</td></tr>";} 
  導出数据时的处理代码:
  Response.Clear();
  Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
  Response.Charset = "";
  Response.Cache.SetCacheability(HttpCacheability.NoCache);   Response.ContentType = "application/vnd.xls";
  System.IO.StringWriter stringWrite = new System.IO.StringWriter();
  HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
  dg_1.RenderControl(htmlWrite);
  Response.Write(stringWrite.ToString());
  Response.End();
  此时如果DataGrid控件AllowPaging设置true,则程序执行时会产生如下错误:类型“DataGridLinkButton”的控件“dg_1_ctl14_ctl01”必须放在具有 runat=server 的窗体标记内。为了解决这个错误并导出所有数据,在创建控件时仍然允许分页,然后在调用Render方法之前把DataGrid控件的AllowPaging设置false并重新绑定数据。
  对于GridView控件,标题部分的实现是在GridView控件的RowCreated事件处理程序添加类似的代码:
  if (e.Row.RowType == DataControlRowType.Header)
  { //代码同上 }
  实现数据导出时无论分页与否都会产生如下的错误:类型“GridView”的控件“gv_1”必须放在具有 runat=server 的窗体标记内。产生这个错误的详细原因可以参考文献[1]中的解释,本文不再详细解释,只对解决方法进讨论。参考文献[2]中提出新建一个Form对象来消除该错误,然而此时导出的Excel文件的开始位置包含一个多余的空行,为了研究产生这个问题的原因,我们可以在Excel文件中单独输出FORM对象的内容,如下所示:
  
其他文献
第一部分    不容错过的精彩电视  通常,我们都是坐在电视机前看电视,网络的出现改变了这一现状,我们再也不用与家人争电视机的遥控器了,网上看电视,电视台更多,自由选择,更加惬意。此外,由于各种原因,我们经常还会错过收看一些精彩的节目,怎么办呢?有没有可以预订的网络电视呢?答案是肯定的。    1 PLive  轻松看网络电视  PPLive是一款全新的流媒体播放软件.它的核心技术类似于现在非常流
期刊
对于上班一族、学生等时尚用户,MP4随身听可以带来很好的娱乐享受,但MP4电影容量太大,不少朋友在早期购买的MP4播放器容量太小,有的甚至只有256MB,就连一部电影都难以放下,同时我们发现,很多MP4电影中有不少广告或者一些拖沓的情景。白白占用了MP4播放器的空间,如果能将视频中不需要的部分剪掉。就可以让MP4播放器放下更多的电影。    1 给普通AVI电影瘦身    MP4文件主流的格式有A
期刊
猜啊猜网站(www.caiAcai.com)摆脱了繁重客户端的束缚,无须下载任何安装软件,是目前仅有的无需缴费就可参与游戏并大量获得现金和奖品的网络竞猜平台。网站于2007年1月8日首次亮相,至2007年6月22日网站第一次改版上线,半年不到的时间就发出货真价实的奖品将近300件,还有2次人民币万元现金大奖,得到“猜客”们的一致好评。    “猜客”是“猜啊猜”衍生的又一新名词,泛指在猜啊猜网站上
期刊
家能带给你温馨的感受,家能让你有一处独自思考空间,家既能如火焰般热情而温暖,又能如晚风般舒心与凉爽,其实每个人的家就是一处仙境,它就是让每颗心靠岸的港湾,《完美世界》的家园就是每个玩家的仙境与心灵港湾,打理好你的私藏空间,你将开启一段如梦如幻犹如仙境般的游戏新生活。    目前大部分玩家能进人的单开场景则是“虚拟训练场”。这在游戏中已成为了一个培养高手的绝佳场所。玩家进入虚拟训练场成长,会得到事半
期刊
中国国际数码互动娱乐产品及技术应用展览会(英文简称ChinaJoy)自2003年成功举办首届以来,至今已经连续举办了五届。在本届ChinaJoy展会期间,组委会同期还举办ChinaJoy五周年成果展暨纪念活动。  ChinaJoy展会是我国由政府主办的最具权威性的数码互动娱乐展会。展会举办以来,充分体现出了我国政府对数码互动娱乐产业发展的积极引导,以及对这一新兴产业的政策扶持力度。展会始终坚持充分
期刊
为了避免QQ聊天记录“惹祸”,防止别人在自己离开后窥视自己的聊天信息,最好方法就是在聊天后删除或加密所有聊天记录。给聊天记录加“锁”有三种方法:一是手动清除,在资源管理器中找到QQ号码所在的文件夹,如\pmgram Fules\Tencent\QQ\(QQ号码)\,删除其中的Msgex.db,就将整个聊天记录都清除掉。如果只清除与某个网友的聊天记录。可在登录QQ的情况下,打开消息管理器,点这个网友
期刊
快车(FlashGet)是互联网上最流行、使用人数最多的一款下载软件。目前推出了最新版——FlashGet1.82.1003简体中文版,它采用多服务器超线程技术、全面支持多种协议,具有优秀的文件管理功能。除此之外,它还具有安全1+1功能。    1、防备流氓软件  在网上流氓软件满天飞的今天,快车具有全球首创的下载安全监测技术SDT(Smart Detectl nq Tech—n010gy),在下
期刊
家能带给你温馨的感受,家能让你有一处独自思考空间,家既能如火焰般热情而温暖,又能如晚风般舒心与凉爽,其实每个人的家就是一处仙境,它就是让每颗心靠岸的港湾。《完美世界》的家园就是每个玩家的仙境与心灵港湾,打理好你的私藏空间,你将开启一段如梦如幻犹如仙境般的游戏新生活。    ·家园区域·    《完美世界》的家园系统分为三大区域,即绿野仙踪、南国一梦、平湖秋月,在这三大家园区域上,又分别分布着多个小
期刊
BT这两个字,这两年以来已经绝对不会陌生了。这种P2P的“草根”下载方式,一方面板大扩充了资源的数量和下载速度,另一方面也伴随着“不可靠”性:由于BT资源从种子制作和发布,到上传下载,几乎都是由个人完成的,自然不可避免有一些别具用心的人会将病毒和木马嵌在资源里,将BT下载作为一种散布病毒的途径。  这么可怕,那我就不用BT了?这种恐慌也未免有些“因噎废食”了,其实并不难,只需做好防毒预案,既可享受
期刊
摘要:物流系统中,配送中心作为物流中心的一种主要形式,以其专业的服务、规范的操作、及时、准确的配送以及费用低廉、规模优化、库存调节等优势而显得日益重要。因此,开发仓储配送系统对于建立整个物流信息系统,解决物流企业当前急需解决的问题具有非常重要的现实意义。本文就如何建设企业配送中心信息系统进行了讨论,提出了一种适合一般企业配送中心信息系统的构建思路。并在此基础上设计实现了一个基于J2EE的从事货物运
期刊