原文地址: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; }