【推荐阅读我的最新的Core版文章,是最全的介绍:C#_.NetCore_Web项目_EXCEL数据导出】
项目需要引用NPOI的Nuget包:
A-2--EXCEL数据导出--WebAPI项目--NPOI--接口导出:
说明:以下方法借助第三方插件:NPOI专门处理EXCEL等办公文档的类库,因此项目中需引用该插件,NuGet--所有NPOI即可安装。
/// <summary> /// 班车数据导出成EXCEL /// </summary> /// <param name="conferenceID"></param> /// <returns></returns> [HttpGet] public HttpResponseMessage ExportExcelDataForBusRoute(string conferenceID) { HttpResponseMessage result = new HttpResponseMessage(); ControllerHelp.RunAction(() => { BusRouteModelCollection busColl = BusRouteModelAdapter.Instance.Load(m => m.AppendItem("ConferenceID", conferenceID)); //如果想要某个单元格内容显示多列,在内容中加入: " " 换行字符 Dictionary<string, string> dicColl = new Dictionary<string, string>() { {"路线标题","Title" }, {"发车时间","DepartDate" }, {"出发地","BeginPlace" }, {"对接人","ContactsName" }, {"对接人电话","ContactsPhone" } }; result = ExcelHelp<BusRouteModel, BusRouteModelCollection>.ExportExcelData(dicColl, busColl, "BusRoute"); }); return result; }
/// <summary> /// 得到excel文件流 /// </summary> /// <returns></returns> private MemoryStream ExcelStream(Dictionary<string, string> displayAndColumnName, TCollection tlist) { //var list = dc.v_bs_dj_bbcdd1.Where(eps).ToList(); HSSFWorkbook workbook = new HSSFWorkbook(); ISheet sheet1 = workbook.CreateSheet("Sheet1"); //1-创建首行 IRow headRow = sheet1.CreateRow(0); //1.1-设置首行样式 IFont font = workbook.CreateFont(); font.Boldweight = (short)FontBoldWeight.Bold; //字体加粗 ICellStyle headCellStyle = workbook.CreateCellStyle(); headCellStyle.SetFont(font); headCellStyle.Alignment = HorizontalAlignment.Center; //字体居中 List<string> displayNameList = displayAndColumnName.Keys.ToList(); //1.2-设置首行标题 for (var i = 0; i < displayAndColumnName.Keys.Count; i++) { ICell cell = headRow.CreateCell(i); cell.SetCellValue(displayNameList[i].ToString()); cell.CellStyle = headCellStyle; } //2-设置内容列 List<string> columnNameList = displayAndColumnName.Values.ToList(); //2.1-内容行样式 ICellStyle contentCellStyle = workbook.CreateCellStyle(); contentCellStyle.Alignment = HorizontalAlignment.Center; //字体居中 contentCellStyle.WrapText = true; //自动换行 for (var i = 0; i < tlist.Count; i++) { IRow row = sheet1.CreateRow(i + 1); //设置内容 for (var j = 0; j < columnNameList.Count; j++) { ICell cell = row.CreateCell(j); cell.SetCellValue(getPropertyValue(tlist[i], columnNameList[j])); cell.CellStyle = contentCellStyle; } } //3-自动列宽-根据内容长度自动展开 for (int i = 0; i < displayNameList.Count; i++) { sheet1.AutoSizeColumn(i); } MemoryStream file = new MemoryStream(); workbook.Write(file); //这句代码非常重要,如果不加,会报:打开的EXCEL格式与扩展名指定的格式不一致 file.Seek(0, SeekOrigin.Begin); return file; } /// <summary> /// 导出excel功能控制器 /// </summary> /// <returns></returns> public HttpResponseMessage ExportExcelDataForWebAPI(Dictionary<string, string> displayAndColumnName, TCollection tlist,string exportFileName) { var file = ExcelStream(displayAndColumnName, tlist); HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new StreamContent(file); result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.ms-excel"); result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); result.Content.Headers.ContentDisposition.FileName = exportFileName+".xls"; return result; }