首页 新闻 会员 周边

Asp.net下载服务器中的excel文件C#代码实现

0
悬赏园豆:10 [已解决问题] 解决于 2014-01-14 09:45

自己的电脑作为服务器,想要下载自己电脑上的这个文件,测试网页一个按钮激活后台事件触发下载,可就是不会激活浏览器,直接弹出乱码窗口,不懂是怎么回事,不懂哪位有好的解决办法,网上一搜至少有4种方法,可是怎么能实现下载完整的excel文件呢  或者用.ashx文件怎么实现呢???

邱育华的主页 邱育华 | 初学一级 | 园豆:10
提问于:2013-12-07 20:34
< >
分享
最佳答案
1

看样子你使用了FineUI或者ExtJs,这个由于是异步,所以对于下载文件不行, 你可以尝试使用<a href='下载文件地址' target="_blank" />也就是采用超级链接,而不要使用框架自带的Button。

收获园豆:10
幻天芒 | 高人七级 |园豆:37175 | 2013-12-08 17:59

这位兄台说的是正解

kyo66691 | 园豆:167 (初学一级) | 2014-01-06 16:28
其他回答(3)
0

使用npoi组件!我刚才写了一个demo,代码不多,你参考一下

            IWorkbook workbook = new XSSFWorkbook();  
            ISheet sheet = workbook.CreateSheet("A1");  //创建sheet
            IRow row1 = sheet.CreateRow(0);    //创建行
            for (int i = 0; i < 10; i++) {
                row1.CreateCell(i).SetCellValue("create" + i);  //创建单元格并给单元格赋值
            }
            IRow row2 = sheet.CreateRow(1);
            for (int i = 0; i < 8; i++) {
                row2.CreateCell(i).SetCellValue("delete" + i);
            }

            MemoryStream memoryStream = new MemoryStream(); //创建内存流
            workbook.Write(memoryStream); //npoi将创建好的工作簿写入到内存流
            

            HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "123.xls"); 
            HttpContext.Current.Response.BinaryWrite(memoryStream.ToArray());
            HttpContext.Current.Response.End();
            memoryStream.Dispose();

具体npoihttps://github.com/tonyqus/npoi/,也有很详细的demo

秋壶冰月 | 园豆:5903 (大侠五级) | 2013-12-07 23:16

如何过我从数据库后台查出数据存入datatable,然后怎么把它写入excel呢,NPOI只是简单了解,没有仔细学过,看来的花时间好好弄下,本人菜鸟,要学的还很多啊

支持(0) 反对(0) 邱育华 | 园豆:10 (初学一级) | 2013-12-08 11:41

@叶落无声1:不管是datatable还是list集合的数据导出excel,都要是要循环创建行和单元格并赋值

支持(0) 反对(0) 秋壶冰月 | 园豆:5903 (大侠五级) | 2013-12-08 11:54

@秋壶冰月: 你自己先试着写出来!写不出来,在问我,可以封装方法,循环将datatable的中的数据读取出来,在写单元格中

支持(0) 反对(0) 秋壶冰月 | 园豆:5903 (大侠五级) | 2013-12-08 12:01

@秋壶冰月: IWorkbook workbook = new XSSFWorkbook(); ISheet sheet = workbook.CreateSheet("A1"); //创建sheet


HSSFWorkbook workbook = new HSSFWorkbook();
//HSSFSheet sheet = workbook.CreateSheet("sheet1");

 

很多的文档显示是这个建立方法,你那种是提示报错啊,取数据存入datatable中是没问题啦,只是创建excel文件时不太懂

支持(0) 反对(0) 邱育华 | 园豆:10 (初学一级) | 2013-12-08 13:21

@叶落无声1: 有没有引入程序集,引入命名空间啊

支持(0) 反对(0) 秋壶冰月 | 园豆:5903 (大侠五级) | 2013-12-08 14:04

@秋壶冰月: 不知道你这个代码是哪个版本,应该是要引用这些吧NPOI.Dll  NPOI.POIFS.Dll、NPOI.HSSF.Dll、NPOI.Util.Dll

我在官网下载的包里面只有NPOI.dll有啊,不太清楚这是怎么回事,有没有完整的包文件

支持(0) 反对(0) 邱育华 | 园豆:10 (初学一级) | 2013-12-08 15:01

@叶落无声1:你邮箱多少啊?我把npoi发到你邮箱中,

支持(0) 反对(0) 秋壶冰月 | 园豆:5903 (大侠五级) | 2013-12-08 15:11

@秋壶冰月: 814934226@qq.com 非常感谢!!

支持(0) 反对(0) 邱育华 | 园豆:10 (初学一级) | 2013-12-08 15:14

@叶落无声1: IWorkbook、ISheel这些个还是报错,是怎么回事呢,该引用的我都引用了啊

支持(0) 反对(0) 邱育华 | 园豆:10 (初学一级) | 2013-12-08 15:33

@叶落无声1: 

直接出现这个事编码的问题吗

支持(0) 反对(0) 邱育华 | 园豆:10 (初学一级) | 2013-12-08 15:53
0

接楼上,如果是要动态的生成下载文件,那只能先生成文件了,ajax是下载不了文件的。

Rookier | 园豆:652 (小虾三级) | 2013-12-09 10:55
0

你直接Response.Write()不就行了吗

还有link直址指向你的excel文件也行啊

Albert Fei | 园豆:2102 (老鸟四级) | 2013-12-09 11:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册