【推薦閱讀我的最新的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)); //如果想要某個單元格內容顯示多列,在內容中加入: "\n" 換行字符 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; }