NPOI2.0導出excel之添加樣式、邊框和表頭


 //優化后導出excel
        public System.IO.Stream ExcelStream(string search) //
        {
            var orderBusiniss = Containers.ObjectContainer.CreateObject<IOrderBusiness>();
            var list = orderBusiniss.GetExcel(search);

            NPOI.HSSF.UserModel.HSSFWorkbook hssfworkbook = new NPOI.HSSF.UserModel.HSSFWorkbook();

            NPOI.SS.UserModel.ISheet sheet1 = hssfworkbook.CreateSheet("生產計划");

            //添加標題頭
            sheet1.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 13));
            NPOI.SS.UserModel.IRow rowTitle = sheet1.CreateRow(0);
            rowTitle.Height = 30 * 20;//設置行高
            var cellTitel = rowTitle.CreateCell(0);

            //給標題頭添加格式
            NPOI.SS.UserModel.ICellStyle styleTitle = hssfworkbook.CreateCellStyle();
            styleTitle.Alignment = HorizontalAlignment.Center;//單元格水平居中
            IFont fontTitle = hssfworkbook.CreateFont();//新建一個字體樣式對象
            fontTitle.Boldweight = short.MaxValue;//設置字體加粗樣式
            fontTitle.FontHeightInPoints = 16;//設置字體大小
            styleTitle.SetFont(fontTitle);//使用SetFont方法將字體樣式添加到單元格樣式中
            cellTitel.CellStyle = styleTitle;

            cellTitel.SetCellValue(ApplicationContext.Current.CompanyName + "公司生產計划單");


            //通過反射得到需要導出的屬性
            Type orderExcel = typeof(OrderToExcel);
            PropertyInfo[] ps = orderExcel.GetProperties();
            string[] title = new string[] { 
                "序號",
                "生產時間" ,
                "訂單號",
                "業務員",
                "工程名稱",
                "建築單位",
                "施工部位",
                "產品信息",
                "特殊要求",
                "方量(M3)",
                "下單時間",
                "聯系人",
                "聯系電話",
                "備注",
            };
            //添加行頭
            NPOI.SS.UserModel.IRow rowHeader = sheet1.CreateRow(1);

            //公共樣式:加邊框
            NPOI.SS.UserModel.ICellStyle style = hssfworkbook.CreateCellStyle();
            style.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
            style.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
            style.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
            style.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
            style.Alignment = HorizontalAlignment.Center;

            NPOI.SS.UserModel.ICellStyle styleHeader = hssfworkbook.CreateCellStyle();
            styleHeader.CloneStyleFrom(style);//克隆公共的樣式
            styleHeader.Alignment = HorizontalAlignment.Center;//單元格水平居中
            IFont fontHeader = hssfworkbook.CreateFont();//新建一個字體樣式對象
            fontHeader.Boldweight = short.MaxValue;//設置字體加粗樣式
            styleHeader.SetFont(fontHeader);//使用SetFont方法將字體樣式添加到單元格樣式中


            for (int i = 0; i < ps.Length + 1; i++)
            {
                var cellHeard = rowHeader.CreateCell(i);
                cellHeard.CellStyle = styleHeader;
                cellHeard.SetCellValue(title[i]);
            }

            if (list != null)
            {
                //通過序列號,得到需要導出的字段
                List<OrderToExcel> listExcel = list.ToObjectList<Order, OrderToExcel>();
                //保存列集合的屬性信息數組
                PropertyInfo[] oProps = null;
                for (int i = 0; i < listExcel.Count; i++)
                {
                    NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 2);

                    var cellNum = rowtemp.CreateCell(0, CellType.Numeric);
                    cellNum.CellStyle = style;
                    cellNum.SetCellValue(i + 1);
                    oProps = ((Type)listExcel[i].GetType()).GetProperties();
                    for (int j = 0; j < oProps.Length; j++)
                    {
                        Type colType = oProps[j].PropertyType;//得到屬性的類型
                        var value = oProps[j].GetValue(listExcel[i]);//得到屬性的值
                        var cell = rowtemp.CreateCell(j + 1);
                        cell.CellStyle = style;
                        cell.SetCellValue(value == null ? "" : value.ToString());
                    }
                }

            }

            //自動調節行寬度
            for (int i = 0; i < 15; i++)
                sheet1.AutoSizeColumn(i);

            System.IO.MemoryStream file = new System.IO.MemoryStream();
            hssfworkbook.Write(file);
            file.Seek(0, System.IO.SeekOrigin.Begin);

            return file;
        }

        public class OrderToExcel
        {
            public Nullable<System.DateTime> ProductionTime { get; set; }
            public string Code { get; set; }
            public string BSalesman { get; set; }
            public string ProjectName { get; set; }
            public string ConstructionUnit { get; set; }
            public string ConstructionSite { get; set; }
            public string ProductName { get; set; }
            public string WP { get; set; }
            public Nullable<decimal> Number { get; set; }
            public Nullable<System.DateTime> CreationTime { get; set; }
            public string ContactPerson { get; set; }
            public string ContactPhone { get; set; }
            public string Remarks { get; set; }
        }

  

之前做了導出excel功能,沒有樣式比較難看。最近優化了下,NPOI版本為最新版本2.0.4.1版本

優化添加:

1.添加了標題。

2.通過對象的屬性來導出excel,表頭添加也比較容易點。

 


免責聲明!

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



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