• NPOI _导出exl(简单应用)


    1. 导出exl表格,创建表格导出到客户端

      public static MemoryStream Export_Table<T>(List<T> datalist)
            {
                MemoryStream ms = new MemoryStream();
                var members = typeof(T).GetProperties();
                var workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();
                NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet();
                NPOI.SS.UserModel.IRow headerRow = sheet.CreateRow(0);
                int order = 1;
                foreach (var meber in members)//初始化标题
                {
                    string titlevalue = "";
                    var name = meber.GetCustomAttributes(typeof(TableAttribulate), false);
                    if (name.Length == 0)
                        continue;
                    var pro = name[0] as TableAttribulate;
                    if (pro == null)
                        continue;
                    titlevalue = pro.CName;
                    var cell = headerRow.CreateCell(order);
                    cell.SetCellValue(titlevalue);
                    if(pro.Weight==0)
                        sheet.AutoSizeColumn(order,true);
                    else
                    {
                        sheet.SetColumnWidth(order,pro.Weight);
                    }
                    cell.CellStyle = GetStyle(workbook);
                    cell.CellStyle.Alignment = pro.HorizontalAlignment;
                    var cellfont = workbook.CreateFont();
                    cellfont.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
                    cell.CellStyle.SetFont(cellfont);
                    order++;
                }
    
                int rowIndex = 1;
                foreach (var row in datalist)
                {
                    NPOI.SS.UserModel.IRow dataRow = sheet.CreateRow(rowIndex);
                    int colIndex = 0;
                    var cellindex = dataRow.CreateCell(colIndex);
                    cellindex.SetCellValue(rowIndex);
                    cellindex.CellStyle = GetStyle(workbook);
                    var cellfont = workbook.CreateFont();
                    cellfont.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Normal;
                    cellfont.Color = NPOI.HSSF.Util.HSSFColor.LightBlue.Index;
                    cellindex.CellStyle.SetFont(cellfont);
                    colIndex++;
                    foreach (var meber in members)
                    {
                        var name = meber.GetCustomAttributes(typeof(TableAttribulate), false);
                        if (name.Length == 0)
                            continue;
                        var pro = name[0] as TableAttribulate;
                        if (pro == null)
                            continue;
                        //if (pro.Weight == 0)   
                        //    sheet.AutoSizeColumn(colIndex, true); //设置成动态的,自动大小时就很慢,这里注掉,如果要用,想别的办法
                        var cell = dataRow.CreateCell(colIndex);
                        var mebervalue = meber.GetValue(row);
                        cell.SetCellValue(mebervalue == null ? "" : mebervalue.ToString());
                        cell.CellStyle = GetStyle(workbook);
                        cell.CellStyle.Alignment = pro.HorizontalAlignment;
                        colIndex++;
                    }
                    rowIndex++;
                }
                workbook.Write(ms);
                ms.Seek(0, SeekOrigin.Begin);
                return ms;//
            }

    2.代码总的特性

    public class TableAttribulate:Attribute
            {
                public TableAttribulate(string name, int weight = 0, NPOI.SS.UserModel.HorizontalAlignment hoalign = NPOI.SS.UserModel.HorizontalAlignment.Center)
                {
                    CName = name;
                    Weight = weight;
                    HorizontalAlignment = hoalign;
                }
                public string CName { get; set; }
    
                public int Weight { get; set; }
    
                public NPOI.SS.UserModel.HorizontalAlignment HorizontalAlignment { get; set; }//对齐方式
    
            }

     3.函数样式

            public static NPOI.SS.UserModel.ICellStyle GetStyle(NPOI.HSSF.UserModel.HSSFWorkbook workbook)
            {
                var cs = workbook.CreateCellStyle();
                cs.DataFormat = NPOI.HSSF.UserModel.HSSFDataFormat.GetBuiltinFormat("@");
                cs.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
                cs.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
                cs.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
                cs.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
                cs.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                cs.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
                
                var cellfont = workbook.CreateFont();
                cellfont.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Normal;
    
                cs.SetFont(cellfont);
                return cs;
            }

    老版的:

           public static NPOI.SS.UserModel.ICellStyle GetDefaultStyle(XSSFWorkbook workbook)
            {
                var cs = workbook.CreateCellStyle();
                cs.DataFormat = NPOI.HSSF.UserModel.HSSFDataFormat.GetBuiltinFormat("@");
                cs.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
                cs.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
                cs.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
                cs.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
                cs.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                cs.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;
                var cellfont = workbook.CreateFont();
                cellfont.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Normal;
                cs.SetFont(cellfont);
                return cs;
            }

    4.js调用实例

            function func_queryExportExl() {
                var url = '@Url.Action("ExportExcel", "ResidentsSigned");
                window.location.href = url;
            }

     5.后端调用

    List<TableExel> query = dbContext.Database.SqlQuery<TableExel>(sql).ToList();
    var ms = CPSYS.Web.Common.FileOption.Export_Table<TableExel>(query); return File(ms, "application/vnd.ms-excel", "text.xls");

     6.合并单元格后的边框格式问题

      public void SetTyleThin(NPOI.HSSF.UserModel.HSSFWorkbook workbook,NPOI.SS.UserModel.ISheet sheet,int lastrow)
            {
                NPOI.SS.Util.CellRangeAddress region = new NPOI.SS.Util.CellRangeAddress(4, lastrow, 0, 23); 
                ((NPOI.HSSF.UserModel.HSSFSheet)sheet).SetEnclosedBorderOfRegion(region, NPOI.SS.UserModel.BorderStyle.Thin, NPOI.HSSF.Util.HSSFColor.Black.Index);
            }

     7.读入模板

                HSSFWorkbook workbook = null;
                var path = AppDomain.CurrentDomain.BaseDirectory + "/ExcelTemplate/重点孕妇登记随访本.xls";
                FileStream filest = new FileStream(path, FileMode.Open, FileAccess.Read);
    
                workbook = new HSSFWorkbook(filest);
                filest.Close();
    
                NPOI.SS.UserModel.ISheet sheet = workbook.GetSheet("重点孕妇登记随访本");
  • 相关阅读:
    《人月神话》读后感-何保委
    软件工程2017第二次作业随笔-何保委
    软件工程2017第一次作业随笔
    实验吧 REVERSE
    浙大ctf REVERSE
    eclipse安装
    表单
    【南京邮电】maze 迷宫解法
    看雪.TSRC 2017CTF秋季赛第三题
    使用Z3破解简单的XOR加密
  • 原文地址:https://www.cnblogs.com/leolzi/p/7851735.html
Copyright © 2020-2023  润新知