您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2374|回复: 3

datagrid导出excel文件并下载的几种方法

[复制链接]

2552

主题

15

听众

3161

积分

管理员

Rank: 75Rank: 75Rank: 75

性别
听众数
15
买家信用
卖家信用
在线时间
1426 小时
相册
0

版主勋章 管理员勋章 特殊贡献勋章 原创先锋勋章 解答高手勋章 新人进步勋章 智慧卓越勋章 开发团队勋章 在线之星勋章 社区元老勋章 无私奉献勋章 最佳创意勋章 勤奋学习勋章

发表于 2006-8-9 09:56:00 |显示全部楼层
程序员装备

方法一:导出到csv文件,存放在服务器端任一路径,然后给客户下载 <br><br>优点: <br>1、可以进行身份认证后给客户下载,如果放到非web目录就没有对应的url,客户无法随时下载。 <br>2、也是因为生成了文件,所以占用了服务器的空间,但是可以把文件名存放到数据库,再次给客户下载的时候不需要重复生成文件。 <br>3、csv文件是文本文件,逗号隔开字段,回车隔开行,易于数据导入导出。 <br><br>实现方法: <br>   sqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings[&quot;conn&quot;]); <br>   SqlDataAdapter da=new SqlDataAdapter(&quot;select * from tb1&quot;,conn); <br>   DataSet ds=new DataSet(); <br>   da.Fill(ds,&quot;table1&quot;); <br>   DataTable dt=ds.Tables[&quot;table1&quot;]; <br>   string name=System.Configuration.ConfigurationSettings.AppSettings[&quot;downloadurl&quot;].ToString()+DateTime.Today.ToString(&quot;yyyyMMdd&quot;)+new Random(DateTime.Now.Millisecond).Next(10000).ToString()+&quot;.csv&quot;;//存放到web.config中downloadurl指定的路径,文件格式为当前日期+4位随机数 <br>   FileStream fs=new FileStream(name,FileMode.Create,FileAccess.Write); <br>   StreamWriter sw=new StreamWriter(fs,System.Text.Encoding.GetEncoding(&quot;gb2312&quot;)); <br>   sw.WriteLine(&quot;自动编号,姓名,年龄&quot;); <br>   foreach(DataRow dr in dt.Rows) <br>   { <br>    sw.WriteLine(dr[&quot;ID&quot;]+&quot;,&quot;+dr[&quot;vName&quot;]+&quot;,&quot;+dr[&quot;iAge&quot;]); <br>   } <br>   sw.Close(); <br>   Response.AddHeader(&quot;Content-Disposition&quot;, &quot;attachment; filename=&quot; + Server.UrlEncode(name)); <br>   Response.ContentType = &quot;application/ms-excel&quot;;// 指定返回的是一个不能被客户端读取的流,必须被下载 <br>   Response.WriteFile(name); // 把文件流发送到客户端 <br>   Response.End(); <br><br>方法二:导出到csv文件,不存放到服务器,直接给浏览器输出文件流 <br><br>优点: <br>1、随时生成,不需要占用资源 <br>2、可以结合身份认证 <br>3、同样利于数据交换 <br><br>实现方法: <br>SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings[&quot;conn&quot;]); <br>   SqlDataAdapter da=new SqlDataAdapter(&quot;select * from tb1&quot;,conn); <br>   DataSet ds=new DataSet(); <br>   da.Fill(ds,&quot;table1&quot;); <br>   DataTable dt=ds.Tables[&quot;table1&quot;]; <br>   StringWriter sw=new StringWriter(); <br>   sw.WriteLine(&quot;自动编号,姓名,年龄&quot;); <br>   foreach(DataRow dr in dt.Rows) <br>   { <br>    sw.WriteLine(dr[&quot;ID&quot;]+&quot;,&quot;+dr[&quot;vName&quot;]+&quot;,&quot;+dr[&quot;iAge&quot;]); <br>   } <br>   sw.Close(); <br>   Response.AddHeader(&quot;Content-Disposition&quot;, &quot;attachment; filename=test.csv&quot;); <br>   Response.ContentType = &quot;application/ms-excel&quot;; <br>   Response.ContentEncoding=System.Text.Encoding.GetEncoding(&quot;GB2312&quot;); <br>   Response.Write(sw); <br>   Response.End(); <br><br>对方法一,二补充一点,如果你希望导出的是xls文件分隔符用&#92;t就可以了,不要用逗号 <br><br>代码修改如下: <br>sw.WriteLine(&quot;自动编号&#92;t姓名&#92;t年龄&quot;); <br>   foreach(DataRow dr in dt.Rows) <br>   { <br>    sw.WriteLine(dr[&quot;ID&quot;]+&quot;&#92;t&quot;+dr[&quot;vName&quot;]+&quot;&#92;t&quot;+dr[&quot;iAge&quot;]); <br>   } <br>另外,修改输出的文件扩展名为xls即可。 <br><br>方法三:从datagrid导出html代码,生成excel文件,给客户端下载 <br><br>优点: <br>1、有固定的格式,样子好看(datagrid的样子) <br><br>局限性: <br>1、不适合数据交换,里面有html代码,比较乱,没有固定格式 <br>2、datagrid不能有分页、排序等,否则出错 <br><br>实现方法: <br>Response.Clear(); <br>   Response.Buffer= false; <br>   Response.Charset=&quot;GB2312&quot;; <br>   Response.AppendHeader(&quot;Content-Disposition&quot;,&quot;attachment;filename=test.xls&quot;); <br>   Response.ContentEncoding=System.Text.Encoding.GetEncoding(&quot;GB2312&quot;);    Response.ContentType = &quot;application/ms-excel&quot;;    this.EnableViewState = false; <br>   System.IO.StringWriter oStringWriter = new System.IO.StringWriter(); <br>   System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter); <br>   this.DataGrid1.RenderControl(oHtmlTextWriter); <br>   Response.Write(oStringWriter.ToString()); <br>   Response.End(); <br><br>在这里说明一点:有的网友反映代码出现“没有dr[&quot;id&quot;]”之类的错误,这个代码是按照我的数据结构来写的,到时候相关的字段要换成你自己的才是。 <br><br>还有就是如果文件名需要中文的话,这么修改Response.AddHeader(&quot;Content-Disposition&quot;, &quot;attachment; filename=&quot;+System.Web.HttpUtility.UrlEncode(&quot;中文&quot;,System.Text.Encoding.UTF8)+&quot;.xls&quot;); <br><br>

0

主题

0

听众

1

积分

应届毕业生

Rank: 1

性别
保密
听众数
0
买家信用
卖家信用
在线时间
0 小时
相册
0
发表于 2006-9-28 01:52:00 |显示全部楼层

回复

很好哦! 顶一下!
回复

使用道具 举报

0

主题

0

听众

1

积分

应届毕业生

Rank: 1

性别
保密
听众数
0
买家信用
卖家信用
在线时间
0 小时
相册
0
发表于 2007-1-19 10:15:00 |显示全部楼层

回复

谢谢,确实不错。也很详细!希望楼主多发表一下您的心得!!!!
回复

使用道具 举报

430

主题

0

听众

495

积分

管理员

Rank: 75Rank: 75Rank: 75

性别
保密
听众数
0
买家信用
卖家信用
在线时间
30 小时
相册
0

高端人才勋章 版主勋章 管理员勋章 开发团队勋章 社区元老勋章

发表于 2007-1-5 20:50:00 |显示全部楼层

回复

猫猫。。不错哈学到了些
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册


关闭

站长推荐上一条 /1 下一条



      
    Archiver|手机版|臣迅电子商务|网站地图|渝ICP备11003388号

GMT+8, 2012-5-20 09:17

© 2001-2011 Powered by Discuz! X2.5. Theme By Yeei! update By CNNTEC

webSite begin 2005

回顶部