zoukankan      html  css  js  c++  java
  • 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("重点孕妇登记随访本");
  • 相关阅读:
    HDU 1004 Let the Balloon Rise【STL<map>】
    UVA 1030
    UVA 10881
    POJ 3154 Graveyard【多解,数论,贪心】
    浅谈Notepad++选中行操作+快捷键+使用技巧【超详解】
    COGS 68. [NOIP2005] 采药【01背包复习】
    [phomeflashpic]怎样调用帝国CMS图片幻灯效果
    微信认证新增公对公账户银行卡转账支付审核费用 缩减认证审核时长
    微信公众平台回复过了怎么不能再次回复?亲们要注意查看"公众平台回复用户消息时限变更通知"的公告啊
    新版微信终于支持消息撤回了 微信零钱也能转账了[微信5.3.1.16更新]
  • 原文地址:https://www.cnblogs.com/leolzi/p/7851735.html
Copyright © 2011-2022 走看看