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;"通知驱动程序始终将"互混"数据列作为文本读取。