webapi-npoi-導出excel


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM