导出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(); } }
这样就可以导出了