MVC 实现表格数据导出Excel(NPOI方式)

前端View(@ViewBag为查询条件):

<span id="exprobtn" class="btn_blue" style="dispaly:block;float:left;margin-left:5px;"><a href='/RunSum/Excel?date_Start=@ViewBag.dateStart&date_End=@ViewBag.dateEnd' target='_blank' style="color:white">导出</a></span>

后台Controller:

        //导出excel
        public FileResult Excel()
        {
            //获取list数据
            string date_Start = string.Empty;
            string date_End = string.Empty;
            string strlist = string.Empty;

            date_Start = Request["date_Start"] ?? "";
            date_End = Request["date_End"] ?? "";

//调用WebService获取数据 DTWebService.WebService ws
= new DTWebService.WebService(); try { strlist = ws.GetMJData(date_Start, date_End); } catch (Exception ex) { WriteLog(ex.ToString()); }
//将WebService获取的数据反序列成 泛型List<T> List
<Xdbmjcs> list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Xdbmjcs>>(strlist); //创建Excel文件的对象 NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook(); //添加一个sheet NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("消毒包灭菌次数统计"); //给sheet1添加第一行的头部标题 NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0); row1.CreateCell(0).SetCellValue("序号"); row1.CreateCell(1).SetCellValue("消毒包编码"); row1.CreateCell(2).SetCellValue("消毒包名称"); row1.CreateCell(3).SetCellValue("消毒次数"); row1.CreateCell(4).SetCellValue("每次消毒费用"); row1.CreateCell(5).SetCellValue("金额");

//设置小数位
            IDataFormat dataformat = book.CreateDataFormat();
            ICellStyle style0 = book.CreateCellStyle();
            style0.DataFormat = dataformat.GetFormat("0.00");
//将数据逐步写入sheet1各个行 for (int i = 0; i < list.Count; i++) { NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1); rowtemp.CreateCell(0).SetCellValue(list[i].FRowNo); rowtemp.CreateCell(1).SetCellValue(list[i].FXdbbm); rowtemp.CreateCell(2).SetCellValue(list[i].FXdbmc); rowtemp.CreateCell(3).SetCellValue(list[i].FXdcs); rowtemp.CreateCell(4).SetCellValue((double)list[i].FMcxdfy);
 rowtemp.GetCell(4).CellStyle = style0; rowtemp.CreateCell(
5).SetCellValue((double)list[i].FMoney);
 rowtemp.GetCell(5).CellStyle = style0; }
//列宽自适应,只对英文和数字有效 for (int i = 0; i <= list.Count; i++) { sheet1.AutoSizeColumn(i); } // 写入到客户端 System.IO.MemoryStream ms = new System.IO.MemoryStream(); book.Write(ms); ms.Seek(0, SeekOrigin.Begin);
//根据浏览器设置是直接默认下载到指定路径还是询问选址
return File(ms, "application/vnd.ms-excel", "消毒包灭菌次数统计.xls"); }
原文地址:https://www.cnblogs.com/Violety/p/9447754.html