原文地址:https://blog.csdn.net/u010162297/article/details/76572269
原文地址:https://www.cnblogs.com/qlqwjy/p/8971207.html
两种方法处理:
1,get方法
前端页面
window.location = ApiUrl + "/api/xx/xx?xx=1&xx2=2"
控制器
/// <summary> /// 导出数据 /// </summary> /// <param name="model"></param> /// <returns></returns> [AllowAnonymous] [HttpGet] public HttpResponseMessage xx([FromUri]RequestModel model) { //获取导出文件流 var stream = _service.ExportData(model); if (stream == null) { return new HttpResponseMessage(HttpStatusCode.NoContent); } try { HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new StreamContent(stream); result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.ms-excel"); result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); result.Content.Headers.ContentDisposition.FileName =$"xx{System.DateTime.Now.ToString("yyyyMMddHHmmss")}.xls"; return result; } catch { return new HttpResponseMessage(HttpStatusCode.NoContent); } }
二:post方法
前端页面
var exportForm = $("<form action='" + ApiUrl + "/api/xx/xx' method='post'></form>"); exportForm.append("<input type='hidden' name='xx' value='" + xx + "'/>"); exportForm.append("<input type='hidden' name='xx2' value='" + xx2 + "'/>"); $(document.body).append(exportForm); exportForm.submit(); exportForm.remove();
控制器
/// <summary> /// 导出数据 /// </summary> /// <param name="model"></param> /// <returns></returns> [AllowAnonymous] [HttpPost] public HttpResponseMessage xx(RequestModel model) { //获取导出文件流 var stream = _service.ExportData(model); if (stream == null) { return new HttpResponseMessage(HttpStatusCode.NoContent); } try { HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new StreamContent(stream); result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.ms-excel"); result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); result.Content.Headers.ContentDisposition.FileName =$"合同管理{System.DateTime.Now.ToString("yyyyMMddHHmmss")}.xls"; return result; } catch { return new HttpResponseMessage(HttpStatusCode.NoContent); } }
业务类中文件流的处理
/// <summary> /// 导出数据 /// </summary> /// <param name="model"></param> /// <returns></returns> public System.IO.Stream ExportData(RequestModel model) { //获取需要导出的list列表数据 var responseData=GetListData(model); if (responseData.errorCode != "00") { return null; } #region 生成xls var lstTitle = new List<string>{ "日期", "xx", "xx", "xx", "xx", "xx", "xx","xx","xx"};//, IWorkbook book = new HSSFWorkbook(); ISheet sheet = book.CreateSheet("sheet1"); IRow rowTitle = sheet.CreateRow(0); ICellStyle style = book.CreateCellStyle(); style.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;//垂直居中 for (int i = 0; i < lstTitle.Count; i++) { rowTitle.CreateCell(i).SetCellValue(lstTitle[i]); } var list = responseData.rows; if (list != null) { list.OrderByDescending(o => o.CreateTime); int start = 0;//记录同组开始行号 int end = 0;//记录同组结束行号 string temp = "";//记录上一行的值 for (int i = 0; i < list.Count; i++) { IRow row = sheet.CreateRow(i + 1); row.CreateCell(0).SetCellValue(list[i].CreateTime?.ToString("yyyy-MM-dd")); row.CreateCell(1).SetCellValue(list[i].xx); row.CreateCell(2).SetCellValue(list[i].xx); row.CreateCell(3).SetCellValue(list[i].xx); row.CreateCell(4).SetCellValue(list[i].xx); row.CreateCell(5).SetCellValue(list[i].xx); row.CreateCell(6).SetCellValue(list[i].ExpireDate?.ToString("yyyy-MM-dd")); row.CreateCell(7).SetCellValue(list[i].ExpireDate?.ToString("yyyy-MM-dd")); row.CreateCell(8).SetCellValue(list[i].xx); row.GetCell(0, MissingCellPolicy.CREATE_NULL_AS_BLANK).SetCellType(CellType.String); var cellText = row.Cells[0].StringCellValue;//获取当前行 第1列的单元格的值 if (cellText == temp)//上下行相等,记录要合并的最后一行 { end = i; } else//上下行不等,记录 { if (start != end) { //设置一个合并单元格区域,使用上下左右定义CellRangeAddress区域 //CellRangeAddress四个参数为:起始行,结束行,起始列,结束列 CellRangeAddress region = new CellRangeAddress(start + 1, end + 1, 0, 0); sheet.AddMergedRegion(region); } start = i; end = i; temp = cellText; } } } #endregion for (int i = 0; i < 7; i++) { sheet.AutoSizeColumn(i);//i:根据标题的个数设置自动列宽 } MemoryStream ms = new MemoryStream(); book.Write(ms); ms.Seek(0, SeekOrigin.Begin); return ms; }