zoukankan      html  css  js  c++  java
  • 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));
                    //如果想要某个单元格内容显示多列,在内容中加入: "
    "  换行字符
                    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;
            }
  • 相关阅读:
    day12 bash中的if、for
    day11 grep正则匹配
    day10 nfs服务,nginx负载均衡,定时任务
    SpringMVC11文件上传
    SpringMVC10数据验证
    SpringMVC09异常处理和类型转化器
    SpringMVC08转发和重定向
    SpringMVC07处理器方法的返回值
    SpringMVC06以对象的方式获取前台的数据
    SpringMVC05使用注解的方式
  • 原文地址:https://www.cnblogs.com/lxhbky/p/11759626.html
Copyright © 2011-2022 走看看