导出excel时,以form方式提交json数据

今天在写项目时写到一个excel的导出,开始想用ajax请求后台后导出,但发现ajax会有返回值,而且ajax无法直接输出文件,而后台的excel导出方法已经封装好,不方便修改。

就改用了提交的方式form,但form提交,表格分页用的是jquerytable,我需要将一些jquerytable的一些参数传到后台,但这些数据已经是json数据,如果我直接放在input中提交到后台在解析参数会很麻烦,所以就想将json数据转为form方式提交。

js

//导出
function exportExcel() {
    var url = "List.aspx?method=ExportInfo";
    $("#exportForm").attr("action", url);
    //清空表单
    $("#exportForm").html("");
    //将json数据转为form表单形式
    $.each(tableData, function (i, obj) {
        $("#exportForm").append("<input  type='hidden' name='" + obj.name + "' value='" + obj.value + "' />");
    });

    exportForm.submit();
}

前台效果

后台(这里我就可以直接使用开始的分页数据不需要再进行过多处理(只需固定页显示总数和,当前页面))

        public void ExportInfo()
        {
            //需要对前台参数进行赋值
            ClassParameter param = new ClassParameter();

            param.iDisplayLength = int.Parse(Request.Form["iDisplayLength"]);
            param.iDisplayStart = int.Parse(Request.Form["iDisplayStart"]);
            param.iColumns = int.Parse(Request.Form["iColumns"]);
            param.iSortingCols = int.Parse(Request.Form["iSortingCols"]);
            param.sColumns = Request.Form["sColumns"];

            //查询条件
            param.SelectStr = Request.Form["SelectStr"];
            param.Specialty = string.IsNullOrEmpty(Request.Form["Specialty"]) ? Guid.Empty : new Guid(Request.Form["Specialty"]);
            param.StartTime = Request.Form["StartTime"];
            param.State = string.IsNullOrEmpty(Request.Form["State"]) ? CommonConts.INTZERO : int.Parse(Request.Form["State"]);

            param.GetOrderExpression(Request);
            DataTableResult<List<P_ClassInfoVO>> result = P_ClassManage.Page(param);
            Export(result.aaData);//导出方法
        }

导出方法

  /// <summary>
        /// 导出excel
        /// </summary>
        /// <param name="classList"></param>
        private void Export(List<P_ClassInfoVO> classList)
        {
            //判读是否为空
            if (classList.Count == 0)
            {
                return;
            }
            try
            {
                //实例化一个 workbook
                Workbook workbook = new Workbook();
                //打开模板(在服务器上)
                string path = System.Web.HttpContext.Current.Server.MapPath("~");
                path = path.Substring(0, path.LastIndexOf("\\"));
                path += @"\file\ExcelTemplate\班级信息表.xlsx";
                workbook.Open(path);
                int rows = classList.Count;
                int index = 4;
                int i = 1;
                //获得一个worksheet
                Worksheet master = workbook.Worksheets[0];
                workbook.Worksheets.Add("班级信息");
                Worksheet sheet = workbook.Worksheets["班级信息"];
                sheet.Copy(master);
                foreach (P_ClassInfoVO item in classList)
                {
                    Cells cells = sheet.Cells;
                    //表格内容填写
                    cells["A" + index.ToString()].PutValue(i++);
                    cells["B" + index.ToString()].PutValue(item.C_Name);
                    cells["C" + index.ToString()].PutValue(item.C_Code);
                    cells["D" + index.ToString()].PutValue(item.Sp_Name);
                    cells["E" + index.ToString()].PutValue(item.C_StartClassTime);
                    cells["F" + index.ToString()].PutValue(item.C_CloseClassTime);
                    cells["G" + index.ToString()].PutValue(item.C_StudyLength);
                    cells["H" + index.ToString()].PutValue(item.T_Name);
                    cells["I" + index.ToString()].PutValue(item.C_StateStr);
                    cells["J" + index.ToString()].PutValue(item.C_Other);

                    index++;
                }
                workbook.Worksheets.RemoveAt(0);
                Random rd = new Random();

                string fileName = "班级信息" + DateTime.Now.ToString("yyyyMMddhhmmss") + rd.Next(10, 100) + ".xls";

                //ie需要编码(浏览器内核)
                if (Request.UserAgent.ToLower().Contains("trident"))
                {
                    //保存文件
                    fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);
                }
                workbook.Save(fileName, FileFormatType.Excel2003, SaveType.OpenInExcel, System.Web.HttpContext.Current.Response, System.Text.Encoding.UTF8);

                HttpContext.Current.ApplicationInstance.CompleteRequest();
            }
            catch
            {

            }
            finally
            {
                GC.Collect();
            }
        }

 

这样就可以导出了

posted @ 2015-09-24 10:50  开拓丿飞  阅读(2422)  评论(0编辑  收藏  举报