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