MVC 导出一条或者多条数据到Excel
最近在做MVC导出数据到Excel,在MSDN上找到了一个例子,本人加以改之,用在了自己的项目中。以下是代码:
Views:
用JS实现全选将取到的值赋给一个ID为strGUID的隐藏域
<scripttype="text/javascript"language="javascript">
function selectExcel() {
var GUID = document.getElementsByName("checkitem");
var temp = "";
var strGUID = "";
for (var i = 0; i < GUID.length; i++) {
if (GUID[i].checked) {
temp += "'" + GUID[i].value + "',";
}
}
temp = temp.substring(temp.length - 1, 1);
strGUID = "'" + temp
//alert(strGUID);//测试取到的值是否正确
$("#GUID").val(strGUID);//将多选的值赋给Id为strGUID的隐藏域
}
</script>
表单: Action:DataTableToExcel,Controller:SalesOrders
<%using (Html.BeginForm("DataTableToExcel", "SalesOrders"))
{%>
表单里放你的列表数据 ,记得循环输出。
隐藏域:
<inputtype="hidden"id="GUID"name="GUID"value=""/>
提交按钮:
<inputtype="submit"value="导出"onclick="selectExcel()"/>
多选框:
<%=Html.CheckBox("checkitem", new {value=item.GUID})%>
Controller:
//导出单条或多条销售列表到Excel
[Authorize]
[HttpPost]
publicActionResult DataTableToExcel(FormCollection collection)
{
string strGUID = Request.Form["GUID"];
//这个是读取要导出的列表,逻辑要自己写的
DataTable dt = SQLServerDAL.DSalesOrders.SalesOrders_GetListExcel(strGUID).Tables[0];
System.Web.UI.WebControls.DataGrid dgExport = null;
// 当前对话
System.Web.HttpContext curContext = System.Web.HttpContext.Current;
// IO用于导出并返回excel文件
System.IO.StringWriter strWriter = null;
System.Web.UI.HtmlTextWriter htmlWriter = null;
string filename = DateTime.Now.Year + "_" + DateTime.Now.Month + "_" + DateTime.Now.Day + "_"
+ DateTime.Now.Hour + "_" + DateTime.Now.Minute;
byte[] str = null;
if (dt != null)
{
// 设置编码和附件格式
curContext.Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + filename + ".xls");
curContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
curContext.Response.ContentType = "application/vnd.ms-excel";
//System.Text.Encoding.UTF8;
// 导出excel文件
strWriter = new System.IO.StringWriter();
htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);
// 为了解决dgData中可能进行了分页的情况,需要重新定义一个无分页的DataGrid
dgExport = new System.Web.UI.WebControls.DataGrid();
dgExport.DataSource = dt.DefaultView;
dgExport.AllowPaging = false;
dgExport.DataBind();
dgExport.RenderControl(htmlWriter);
// 返回客户端
str = System.Text.Encoding.UTF8.GetBytes(strWriter.ToString());
}
return File(str, "attachment;filename=" + filename + ".xls");
}
MSSQL的存储过程好像不支持’数值1’,’数值2’,’数值3’这样的参数,所以在存储过程中我是这样写的,执行一个字符串:
CREATE PROCEDURE dbo.SalesOrders_GetListExcel
(
@GUID varchar(8000)
)
AS
Begin
Declare @str varchar(8000)
Declare @sqlstr varchar(8000)
Set @str =@GUID
Set @sqlstr='select'+
' SalesNo as 销售订单号,'+
' OrderNumber as 订单号'+
' from SalesOrders where GUID in ('+@str+')'
exec (@sqlstr)
End
到此为止就可以实现导出一条或者多条数据到Excel。
下面上截图:
列表:

查看选中的值:

弹出对话框:
PS:本人用的是IE9.

文档名称:

导出成功:

浙公网安备 33010602011771号