C#_.NetFramework_WebAPI項目_EXCEL數據導出


【推薦閱讀我的最新的Core版文章,是最全的介紹:C#_.NetCore_Web項目_EXCEL數據導出

 

項目需要引用NPOI的Nuget包:

 

A-2--EXCEL數據導出--WebAPI項目--NPOI--接口導出:

說明:以下方法借助第三方插件:NPOI專門處理EXCEL等辦公文檔的類庫,因此項目中需引用該插件,NuGet--所有NPOI即可安裝。

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;
        }


免責聲明!

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



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