CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

在ASP.NET中如何将DataGrid中的数据导入到Excel

楼主szh1689(低手)2005-01-12 16:06:24 在 .NET技术 / ASP.NET 提问

在ASP.NET中如何将DataGrid中的数据导入到Excel中,需要什么组件,在哪里下载?有没有具体的例子?急的用,谢谢! 问题点数:50、回复次数:7Top

1 楼liulxmooo(娃娃)回复于 2005-01-12 16:17:35 得分 0

upTop

2 楼morality(业精于勤,行成于思!)回复于 2005-01-12 16:24:25 得分 20

请参考——转贴:  
   
  从DataView中生成Excel报表的方案(C#)  
   
  转贴:xiaxia       日期:2004-05-29       人气:15    
  前言:    
  前几天一同事问我如何利用C#将数据导到Excel文件当中,当时比较忙没有    
  顾得上去研究,今天特地研究了一下,基本搞定,下面就具体介绍如何将    
  DataView中的数据按照一定格式存到Excel文件当中。    
  正文:    
  一、首先要引用一个Excel的组件,我一开始是在Office   XP下尝试的,不    
  成功,后来把XP给干掉,装2k,就成功了,所以这里分享的是Office   2k下    
  引用相关组件来实现功能的,在工程中引用COM标签中的Microsoft    
  Excel   9.0   Object   Library,添加成功后,引用中会多出三个引用项:    
  Excel、Office、VBIDE。    
   
   
   
   
   
  二、具体代码。    
  using   System;    
  using   System.Data;    
  using   Excel;    
  using   System.IO;    
  namespace   Test.ExcelCom    
  {    
  ///   <summary>    
  ///   将DataView中的数据导入Excel文件中    
  ///   作者:Rexsp    
  ///   创建:2004-4-4    
  ///   </summary>    
  public   class   OutputExcel    
  {    
  #region   私有成员    
  ///   <summary>    
  ///   数据的DataView    
  ///   </summary>    
  private   DataView   dv=null;    
  ///   <summary>    
  ///   表格标题    
  ///   </summary>    
  private   string   title=null;    
  ///   <summary>    
  ///   输出文件路径    
  ///   </summary>    
  private   string   outFilePath=null;    
  ///   <summary>    
  ///   输入文件名    
  ///   </summary>    
  private   string   inputFilePath=null;    
  #endregion    
  #region   公共属性    
  ///   <summary>    
  ///   数据的DataView    
  ///   </summary>    
  public   DataView   DV    
  {    
  set{dv=value;}    
  }    
  ///   <summary>    
  ///   表格标题    
  ///   </summary>    
  public   string   Title    
  {    
  set{title=value;}    
  get{return   title;}    
  }    
  ///   <summary>    
  ///   输出文件路径    
  ///   </summary>    
  public   string   OutFilePath    
  {    
  set{outFilePath=value;}    
  get{return   outFilePath;}    
  }    
  ///   <summary>    
  ///   输入文件路径    
  ///   </summary>    
  public   string   InputFilePath    
  {    
  set{inputFilePath=value;}    
  get{return   inputFilePath;}    
  }    
  #endregion    
   
  #region   构造函数    
  public   OutputExcel()    
  {    
  }    
  public   OutputExcel(DataView   dv,string   title)    
  {    
  //    
  //   TODO:   在此处添加构造函数逻辑    
  //    
  }    
  #endregion    
  #region   公共方法    
  public   void   CreateExcel()    
  {    
  int   rowIndex=4;//行起始坐标    
  int   colIndex=1;//列起始坐标    
  ApplicationClass   myApp=null;    
  Workbook   myBook=null;    
  Worksheet   mySheet=null;    
  //如果文件不存在,则将模板文件拷贝一份作为输出文件    
  //这里如果通过File.Create来创建文件是不行的,因为xls    
  //的空文件也有固定的格式,跟文本不一样的,也许有其它    
  //通过程序直接生成excel的方法,大家可以尝试尝试的    
  if(!File.Exists(outFilePath))    
  {    
  File.Copy(inputFilePath,outFilePath,true);    
  }    
  myApp=   new   ApplicationClass();    
  myApp.Visible=false;    
  object   oMissiong=System.Reflection.Missing.Value;    
  myApp.Workbooks.Open(outFilePath,oMissiong,oMissiong,oMissiong,oMissiong,    
  oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong,oMissiong);    
  myBook=myApp.Workbooks[1];    
  mySheet=(Worksheet)myBook.ActiveSheet;    
   
  //    
  //取得标题    
  //    
  foreach(DataColumn   col   in   dv.Table.Columns)    
  {    
  colIndex++;    
  mySheet.Cells[4,colIndex]   =   col.ColumnName;    
  mySheet.get_Range(mySheet.Cells[4,colIndex],mySheet.Cells[4,colIndex]).HorizontalAlignment   =   XlVAlign.xlVAlignCenter;    
  //设置标题格式为居中对齐    
  }    
  //    
  //取得表格中的数据    
  //    
  foreach(DataRowView   row   in   dv)    
  {    
  rowIndex   ++;    
  colIndex   =   1;    
  foreach(DataColumn   col   in   dv.Table.Columns)    
  {    
  colIndex   ++;    
  if(col.DataType   ==   System.Type.GetType("System.DateTime"))    
  {    
  mySheet.Cells[rowIndex,colIndex]   =   (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");    
  mySheet.get_Range(mySheet.Cells[rowIndex,colIndex],mySheet.Cells[rowIndex,colIndex]).HorizontalAlignment   =   XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐    
  }    
  else    
  if(col.DataType   ==   System.Type.GetType("System.String"))    
  {    
  mySheet.Cells[rowIndex,colIndex]   =   "'"+row[col.ColumnName].ToString();    
  mySheet.get_Range(mySheet.Cells[rowIndex,colIndex],mySheet.Cells[rowIndex,colIndex]).HorizontalAlignment   =   XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐    
  }    
  else    
  {    
  mySheet.Cells[rowIndex,colIndex]   =   row[col.ColumnName].ToString();    
  }    
  }    
  }    
  //    
  //加载一个合计行    
  //    
  int   rowSum   =   rowIndex   +   1;    
  int   colSum   =   2;    
  mySheet.Cells[rowSum,2]   =   "合计";    
  mySheet.get_Range(mySheet.Cells[rowSum,2],mySheet.Cells[rowSum,2]).HorizontalAlignment   =   XlHAlign.xlHAlignCenter;    
  //    
  //设置选中的部分的颜色    
  //    
  mySheet.get_Range(mySheet.Cells[rowSum,colSum],mySheet.Cells[rowSum,colIndex]).Select();    
  mySheet.get_Range(mySheet.Cells[rowSum,colSum],mySheet.Cells[rowSum,colIndex]).Interior.ColorIndex   =   19;//设置为浅黄色,共计有56种    
  //    
  //取得整个报表的标题    
  //    
  mySheet.Cells[2,2]   =   title;    
  //    
  //设置整个报表的标题格式    
  //    
  mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,2]).Font.Bold   =   true;    
  mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,2]).Font.Size   =   22;    
  //    
  //设置报表表格为最适应宽度    
  //    
  mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,colIndex]).Select();    
  mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,colIndex]).Columns.AutoFit();    
  //    
  //设置整个报表的标题为跨列居中    
  //    
  mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,colIndex]).Select();    
  mySheet.get_Range(mySheet.Cells[2,2],mySheet.Cells[2,colIndex]).HorizontalAlignment   =   XlHAlign.xlHAlignCenterAcrossSelection;    
  //    
  //绘制边框    
  //    
  mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,colIndex]).Borders.LineStyle   =   1;    
  mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[rowSum,2]).Borders[XlBordersIndex.xlEdgeLeft].Weight   =   XlBorderWeight.xlThick;//设置左边线加粗    
  mySheet.get_Range(mySheet.Cells[4,2],mySheet.Cells[4,colIndex]).Borders[XlBordersIndex.xlEdgeTop].Weight   =   XlBorderWeight.xlThick;//设置上边线加粗    
  mySheet.get_Range(mySheet.Cells[4,colIndex],mySheet.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeRight].Weight   =   XlBorderWeight.xlThick;//设置右边线加粗    
  mySheet.get_Range(mySheet.Cells[rowSum,2],mySheet.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeBottom].Weight   =   XlBorderWeight.xlThick;//设置下边线加粗    
  myBook.Save();;    
  myBook.Close(   true,outFilePath,true);    
  System.Runtime.InteropServices.Marshal.ReleaseComObject(mySheet);    
  System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);    
  System.Runtime.InteropServices.Marshal.ReleaseComObject(myApp);    
  GC.Collect();    
   
  }    
  #endregion    
  }    
   
  }    
  一点说明:操作Excel的时候,可能会发生Excel进程被锁定,无法退    
  出,解决方法是在保存完并关闭myBook(工作簿)后,别关闭Excel进    
  程(//myApp.Quit();)。这样的结果是服务器上始终有一个Excel的    
  进程。可能会出现asp_net用户操作Excel的权限不够,配置Dcom。运    
  行Dcomcnfg.exe,找到Excel应用程序,配置其属性,身份验证级别    
  选"无",身份标识选"交互式用户",安全性页面,启动和访问均给    
  everyone。注意:查看当前进程中是否有Winword进程存在,如果有且    
  不能被结束,那么重启动计算机。再次运行你的代码即OK。这样以后    
  就不会出现权限不够的情况了。    
  三、调用    
  #region   测试Excel    
  QuickItemCollection   qic   =new   QuickItemCollection();    
  qic.GetAllInfo();    
  DataView   dv=   new   DataView();    
  DataTable   dt   =   new   DataTable("Excel");    
  dt.Columns.Add("ID",System.Type.GetType("System.String"));    
  dt.Columns.Add("ItemName",System.Type.GetType("System.String"));    
  int   qicCount=qic.Count;    
  for(int   i=0;i<qicCount;i++)    
  {    
  DataRow   dr=   dt.NewRow();    
  dr[0]   =   qic[i].ID;    
  dr[1]   =   qic[i].ItemName;    
  dt.Rows.Add(dr);    
  }    
  OutputExcel   ope   =   new   OutputExcel();    
  ope.DV=dt.DefaultView;    
  ope.Title="测试生成Excel";    
  ope.InputFilePath=Server.MapPath("Sample.xls");    
  ope.OutFilePath=Server.MapPath("Test.xls");    
  ope.CreateExcel();    
  #endregion    
  一点说明:这段代码的前半部分读过我那篇《一种快速存取订阅条目的方    
  案》的读者应该认得的,其实也就是一个把集合类中数据填充到    
  DataView中的过程,后面的就是调用。Sample.xls是个新建的空的    
  Sample.xls,然后执行完毕后,就会生成Test.xls文档,    
  Top

3 楼zhangfire(色狼也可以学.net)回复于 2005-01-12 16:24:55 得分 10

看看孟老大写的:  
  http://dotnet.aspx.cc/ShowDetail.aspx?id=8A4CBF47-B888-4832-3389-ED3A3A3C8AABTop

4 楼zhangzhifeng8888(峰)回复于 2005-01-12 16:28:47 得分 0

其实比较简单:就是DataGrid的cell的内容复制到Excel的cell里面。Top

5 楼smallMage(小马哥)回复于 2005-01-12 16:34:30 得分 20

private   void   Button1_Click(object   sender,   System.EventArgs   e)  
  {  
  Response.Clear();    
  Response.Buffer=   true;    
  Response.Charset="GB2312";          
  Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xls");    
  Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文  
  Response.ContentType   =   "application/ms-excel";//设置输出文件类型为excel文件。    
  this.EnableViewState   =   false;          
  System.Globalization.CultureInfo   myCItrad   =   new   System.Globalization.CultureInfo("ZH-CN",true);  
  System.IO.StringWriter   oStringWriter   =   new   System.IO.StringWriter(myCItrad);    
  System.Web.UI.HtmlTextWriter   oHtmlTextWriter   =   new   System.Web.UI.HtmlTextWriter(oStringWriter);  
  this.DataGrid1.RenderControl(oHtmlTextWriter);   //把DATAGRID换成你有数据的DATAGRID就可以搞定了  
  Response.Write(oStringWriter.ToString());  
  Response.End();  
  }  
  Top

6 楼xiaoniaofei(xiaoniao)回复于 2005-01-12 16:51:17 得分 0

孟老大的不错!!  
   
  牛人!!Top

7 楼slhuang(★Shawn★)回复于 2005-01-12 18:01:11 得分 0

好多例子。  
  …………  
  路过。Top

相关问题

  • 求DataGrid导入Excel代码!
  • datagrid数据导入excel
  • asp 中导入Excel文件的问题,
  • 急!如何把datagrid内容导入excel
  • VB将datagrid数据导入excel
  • datagrid的数据怎么导入excel?
  • 导入excel的标题行到datagrid
  • datagrid数据导入到excel的问题
  • 将Excel用ASP导入及将数据导出为Excel详解
  • 把DataGrid 导入excel中去,excel得不到值? 求教!!!

关键词

  • asp.net
  • c#
  • 文件
  • excel
  • 数据
  • dv
  • 组件
  • office
  • asp
  • null

得分解答快速导航

  • 帖主:szh1689
  • morality
  • zhangfire
  • smallMage

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo