问题描述
数据是我从数据库获取得到datatable,并转换为html的table代码想将这些html数据以excel方式发送给前台,让用户下载我用的是FileResult返回的,前台可以alert出这些html代码,但是无法下载xls文件,这是怎么回事呢?后台代码publicFileResultExcelExport(){stringcontent=GetExcelContent();byte[]fileContents=Encoding.UTF8.GetBytes(content);returnFile(fileContents,"application/ms-excel","data.xls");}
前台代码$("#btnExport").click(function(){$.post("ReportTB/ExcelExport",null,function(data,status){//alert(data);});});
解决方案
本帖最后由 yaotomo 于 2016-03-24 10:02:03 编辑
解决方案二:
要下载excel文件,你先要有excel文件,所以你要先生成excel文件。或者是你有excel文件,就打开excel文件把内容保存到excel文件,然后提供下载
解决方案三:
引用1楼yi_iy的回复:
要下载excel文件,你先要有excel文件,所以你要先生成excel文件。或者是你有excel文件,就打开excel文件把内容保存到excel文件,然后提供下载
在http://www.cnblogs.com/ldp615/archive/2010/09/17/asp-net-mvc-file-result.html看到的一段介绍,用这种形式不能直接返回excel吗?FileContentResult可以直接将byte[]以文件形式发送至浏览器(而不用创建临时文件)。参考代码如下:publicActionResultFileContentDownload1(){byte[]data=Encoding.UTF8.GetBytes("欢迎访问鹤冲天的博客http://www.cnblogs.com/ldp615/");returnFile(data,"text/plain","welcome.txt");}
解决方案四:
网上找的MVC导出excel的几种方式,我用的应该是第二种。我就是拼接好一段html代码,再设置输出格式为application/ms-excel的。但是前台不会弹出文件下载的提示框。MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult导出EXCEL方法总结MVC导出数据到EXCEL的方法有很多种,常见的是:1.采用EXCELCOM组件来动态生成XLS文件并保存到服务器上,然后转到该文件存放路径即可;优点:可设置丰富的EXCEL格式,缺点:需要依赖EXCEL组件,且EXCEL进程在服务器中无法及时关闭,以及服务器上会存留大量的不必要的XLS文件;2.设置输出头为:application/ms-excel,再输出拼接的HTMLTABLE数据;优点:无需组件,可设置一些简单的格式,缺点:拼接HTMLTABLE过程较复杂,不够直观;3.借助第三方组件(如:NPOI)优点及缺点均依赖于第三方组件的易用性上面,在此不作说明;大家也可以看我之前发表的一篇博文:我写的一个ExcelHelper通用类,可用于读取或生成数据实现在MVC下新的导出EXCEL方法
解决方案五:
那就是浏览器安全级别的。你去把浏览器的安全级别调低,把ActiveX都打开,再试试。JS导excle要设置ActiveX的好像
解决方案六:
用windows.open那个链接就行了
解决方案七:
如果你非要post的话建个表单表单指向这个路径target设到一个隐藏域然后提交这个表单
解决方案八:
知道原因了。因为我使用的是ajax提交,如果使用form提交,就可以返回excel下载弹出框如果我想使用ajax方式向后退发出请求,就没办法返回excel下载吗?
解决方案九:
ajax只能处理文本信息,不能处理二进制信息
解决方案十:
参考现成的:
解决方案十一:
网上搜索了一下,貌似ajax方式是无法从后台导出excel,供前台下载的。看来只能用表单提交方式了。平时做开发习惯使用ajax,都不用传统表单了,看来太过依赖ajax也不好啊。
解决方案十二:
Response.AddHeader("Content-Disposition","attactment;filename="+文件名);Response.ContentType="application/octet-stream;charset=gbk";Response.BinaryWrite(文件的byte[]);Response.End();
解决方案十三:
引用11楼BitCoffee的回复:
Response.AddHeader("Content-Disposition","attactment;filename="+文件名);Response.ContentType="application/octet-stream;charset=gbk";Response.BinaryWrite(文件的byte[]);Response.End();
代码没有问题,但是ajax的请求是无法返回excel给前台的。
解决方案十四:
$("#btnExport").click(function(){location.href='@Url.Action("ExcelExport","ReportTB")';});