datagridview数据导出到excel,datagridview读取数据

  datagridview数据导出到excel,datagridview读取数据

  最近的项目中有用到数据导出到超过中,在网上也看了,几乎都是一些危言耸听的话,于是我把自己的代码和大家分享一下,供学习使用。

  首先添加对超过的引用NOPI .动态链接库

  ///摘要

  ///导出超过

  ////摘要

  ///param name=Page 导出超过时的页面/param

  ///param name=parames 在超过中增加的数据/param

  ///param name=dg 需要导出的数据源控件/param

  ///param name=fileName 导出超过的文件名/param

  ///param name=typeName 导出的文件类型/param此处类型为:应用程序/vnd.xls

  公共静态空的导出(系统。页面,字符串参数,系统Web . com。UI.WebControls.DataGrid dg,字符串文件名,字符串类型名)

  系统HttpResponse httpResponse=Page .回应;

  http响应.追加标头( Content-Disposition , attachment filename= http utility .UrlEncode(文件名,系统正文。编码。utf8));

  http响应.ContentEncoding=System .文字。编码。获取编码( GB 2312 );

  http响应.ContentType=类型名

  系统10 . IO。StringWriter tw=新系统10 . IO。字符串编写器();

  系统Web . com。UI.HtmlTextWriter hw=新系统web . com。ui。html文本编写器(tw);

  dg .渲染控制(硬件);

  tw .WriteLine(" b " parames "/b ");

  string filePath=Page .服务器。MapPath( . )文件名;

  系统10 . IO。StreamWriter软件=系统10 . IO。File.CreateText(文件路径);

  西南。写(tw .ToString());

  西南. close();

  DownFile(httpResponse,文件名,文件路径);

  http响应.end();

  }

  ///摘要

  ///下载问价

  ////摘要

  ///paramname=Response 文件流/param

  ///paramname=fileName 文件名/param

  ///paramname=fullPath 文件路径/param

  ///返回/返回

  publistaticbooldownfile(System .网络。HttpResponseResponse,stringfileName,stringfullPath){

  boolres=false

  系统10 . IO。FileStreamfs=System .IO。文件。打开读取(完整路径);

  尝试{

  回应content type= application/octet-stream ;

  回应追加头(内容-处置,附件文件名=

  属性UrlEncode(文件名,系统正文。编码。utf8);charset=GB 2312’);

  longfLen=fs .长度;

  intsize=102400//每100K同时下载数据

  byte[]read data=new byte[size];//指定缓冲区的大小

  if(size fLen)size=Convert .toint 32(fLen);

  if(size==0)thrownewException(文件生成失败!);

  长fpos=0;

  boolisEnd=false

  而(!isEnd){

  如果((fPos大小)fLen){

  大小=转换toint 32(fLen-fPos);

  读取数据=新字节[大小];

  isEnd=真

  }

  fs .Read(readData,0,size);//读入一个压缩块

  if(readData .长度0){

  回应二进制写(读数据);

  fPos=大小;

  }

  }

  res=true

  }接住{

  res=false

  }最后{

  fs .close();

  系统10 . IO。文件.删除(完整路径);

  }

  返回者

  }

  //读取超过填充到资料组

  公共数据集ExcelToDS(字符串路径)

  string str conn= Provider=Microsoft .杰特。OLEDB.4.0 数据源=路径扩展属性= Excel 8.0HDR=是;IMEX=1;;

  oledb连接conn=新oledb连接(strConn);

  conn . Open();

  string strExcel=

  oledb dataadapter my command=null;

  数据集ds=空

  strExcel= select * from[sheet 1 $];

  my command=new oledb dataadapter(strExcel,str conn);

  ds=新数据集();

  我的命令Fill(ds,"表1");

  返回ds;

  }

  excel 2003使用的驱动是:

  strConn=Provider=Microsoft .杰特。OLEDB.4.0数据源="文件路径";扩展属性= Excel 8.0HDR=假;IMEX=1 " ";

  Excel 2010,2007使用的驱动

  strConn=Provider=Microsoft .王牌。OLEDB.12.0数据源="文件路径";扩展属性= Excel 8.0HDR=假;IMEX=1 " ";

  //HDR=是表示超过表的第一行为标题行,不则表示为数据行。

  //IMEX=1;"通知驱动程序始终将"互混"数据列作为文本读取。

datagridview数据导出到excel,datagridview读取数据