MVC 导出一条或者多条数据到Excel

 

最近在做MVC导出数据到Excel,在MSDN上找到了一个例子,本人加以改之,用在了自己的项目中。以下是代码:

Views

JS实现全选将取到的值赋给一个IDstrGUID的隐藏域

<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);//将多选的值赋给IdstrGUID的隐藏域

        }

  </script>

表单: ActionDataTableToExcelControllerSalesOrders

<%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.

文档名称:

导出成功:

 

 

 

 

 

posted on 2012-02-10 17:00  橙色Key  阅读(1279)  评论(3)    收藏  举报