首页 > 开发 > 综合 > 正文

datagrid数据导出到excel文件给客户端下载的几种方法

2024-07-21 02:24:05
字体:
来源:转载
供稿:网友

方法一:导出到csv文件,存放在服务器端任一路径,然后给客户下载

优点:
1、可以进行身份认证后给客户下载,如果放到非web目录就没有对应的url,客户无法随时下载。
2、也是因为生成了文件,所以占用了服务器的空间,但是可以把文件名存放到数据库,再次给客户下载的时候不需要重复生成文件。
3、csv文件是文本文件,逗号隔开字段,回车隔开行,易于数据导入导出。

实现方法:
   sqlconnection conn=new sqlconnection(system.configuration.configurationsettings.appsettings["conn"]);
   sqldataadapter da=new sqldataadapter("select * from tb1",conn);
   dataset ds=new dataset();
   da.fill(ds,"table1");
   datatable dt=ds.tables["table1"];
   string name=system.configuration.configurationsettings.appsettings["downloadurl"].tostring()+datetime.today.tostring("yyyymmdd")+new random(datetime.now.millisecond).next(10000).tostring()+".csv";//存放到web.config中downloadurl指定的路径,文件格式为当前日期+4位随机数
   filestream fs=new filestream(name,filemode.create,fileaccess.write);
   streamwriter sw=new streamwriter(fs,system.text.encoding.getencoding("gb2312"));
   sw.writeline("自动编号,姓名,年龄");
   foreach(datarow dr in dt.rows)
   {
    sw.writeline(dr["id"]+","+dr["vname"]+","+dr["iage"]);
   }
   sw.close();
   response.addheader("content-disposition", "attachment; filename=" + server.urlencode(name));
   response.contenttype = "application/ms-excel";// 指定返回的是一个不能被客户端读取的流,必须被下载
   response.writefile(name); // 把文件流发送到客户端
   response.end();

方法二:导出到csv文件,不存放到服务器,直接给浏览器输出文件流

优点:
1、随时生成,不需要占用资源
2、可以结合身份认证
3、同样利于数据交换

实现方法:
sqlconnection conn=new sqlconnection(system.configuration.configurationsettings.appsettings["conn"]);
   sqldataadapter da=new sqldataadapter("select * from tb1",conn);
   dataset ds=new dataset();
   da.fill(ds,"table1");
   datatable dt=ds.tables["table1"];
   stringwriter sw=new stringwriter();
   sw.writeline("自动编号,姓名,年龄");
   foreach(datarow dr in dt.rows)
   {
    sw.writeline(dr["id"]+","+dr["vname"]+","+dr["iage"]);
   }
   sw.close();
   response.addheader("content-disposition", "attachment; filename=test.csv");
   response.contenttype = "application/ms-excel";
   response.contentencoding=system.text.encoding.getencoding("gb2312");
   response.write(sw);
   response.end();

方法三:从datagrid导出html代码,生成excel文件,给客户端下载

优点:
1、有固定的格式,样子好看(datagrid的样子)

局限性:
1、不适合数据交换,里面有html代码,比较乱,没有固定格式
2、datagrid不能有分页、排序等,否则出错

实现方法:
response.clear();
   response.buffer= false;
   response.charset="gb2312";
   response.appendheader("content-disposition","attachment;filename=test.xls");
   response.contentencoding=system.text.encoding.getencoding("gb2312");    response.contenttype = "application/ms-excel";    this.enableviewstate = false;
   system.io.stringwriter ostringwriter = new system.io.stringwriter();
   system.web.ui.htmltextwriter ohtmltextwriter = new system.web.ui.htmltextwriter(ostringwriter);
   this.datagrid1.rendercontrol(ohtmltextwriter);
   response.write(ostringwriter.tostring());
   response.end();
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表