大致流程:前端使用URL地址的方式跳转到action后返回file类型数据
js:
window.location.href = '/Home/index?Id=' + id
后台代码:
/// <summary> /// 导出对比结果 /// </summary> /// <param name="quarter"></param> /// <returns></returns> public FileResult index(int Id) { try { var list = 可以根据传入参数查找到数据库中需要导出的数据列表 //创建Excel文件的对象 NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook(); //创建样式 var style = book.CreateCellStyle(); //单元格样式:水平对齐居中 style.Alignment = HorizontalAlignment.Center; //字体样式 var font=book.CreateFont(); //加粗 font.Boldweight=short.MaxValue; //字体样式加入到单元格样式里面 style.SetFont(font); //添加一个sheet NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1"); var titleCell = sheet1.AddMergedRegion(new CellRangeAddress(0, 2, 0, 3)); var row = sheet1.CreateRow(0); row.CreateCell(0).SetCellValue("签到标题:" + title + " 反馈进度:" + feedBackProgress); //标题的样式设置 row.CreateCell(0).CellStyle = style; //给sheet1添加第一行的头部标题 NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(3); row1.CreateCell(0).SetCellValue("姓名"); row1.CreateCell(1).SetCellValue("性别"); row1.CreateCell(2).SetCellValue("年龄"); //将数据逐步写入sheet1各个行 for (int i = 0; i < list.Count; i++) { NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 4); rowtemp.CreateCell(0).SetCellValue(list[i].name); rowtemp.CreateCell(1).SetCellValue(list[i].sex);//如果是时间字段需要tostring确定格式,否则导出到数据库的时候会变成一个小数的数字 rowtemp.CreateCell(2).SetCellValue(list[i].age); } // 写入到客户端 System.IO.MemoryStream ms = new System.IO.MemoryStream(); book.Write(ms); ms.Seek(0, SeekOrigin.Begin); return File(ms, "application/vnd.ms-excel", string.Format("你的excel-{0}.xls", DateTime.Now.ToString("yyyyMMddhhmmss"))); } catch (Exception ex) { logger.Error(ex.Message + ex.StackTrace); return null; } }