Fork me on GitHub

.Net NPOI 简单Demo,一看就会

#region   文件输出

public class BasicInfodsa
    {
        public string name;
        public string phone;
    }

        List zyData =  new List();
        var zyUserList = BLL_User.getAllZYUserList();
        var zyUserGroup = zyUserList.GroupBy(c => c.AccName.Trim());
        foreach ( var item  in zyUserGroup)
        {
            if (item.Count() > 1)
            {
                foreach ( var subitem  in item)
                {
                    zyData.Add( new BasicInfodsa { name = subitem.AccName, phone = subitem.CardID });
                }
            }
        }

        //获得数据
        var Data = zyData;
        //创建一个新的excel文件
        HSSFWorkbook book =  new HSSFWorkbook();
        //创建一个工作区
        ISheet sheet = book.CreateSheet( "sheet1" );
        //创建一行 也就是在sheet1这个工作区创建一行 在NPOI中只有先创建才能后使用
        IRow row = sheet.CreateRow(0);
        for ( int i = 0; i < 5; i++)
        {
            //设置单元格的宽度
            sheet.SetColumnWidth(i, 16 * 156);
        }
        sheet.SetColumnWidth(4, 30 * 156);
        sheet.SetColumnWidth(1, 21 * 156);
        //定义一个样式,迎来设置样式属性
        ICellStyle setborder = book.CreateCellStyle();

        //设置单元格上下左右边框线 但是不包括最外面的一层
        setborder.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
        setborder.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
        setborder.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
        setborder.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;

        //文字水平和垂直对齐方式
        setborder.VerticalAlignment = VerticalAlignment.Center; //垂直居中
        setborder.Alignment = HorizontalAlignment.Center; //水平居中
        setborder.WrapText =  true ; //自动换行

        //再定义一个样式,用来设置最上面标题行的样式
        ICellStyle setborderdeth = book.CreateCellStyle();

        //设置单元格上下左右边框线 但是不包括最外面的一层
        setborderdeth.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
        setborderdeth.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
        setborderdeth.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
        setborderdeth.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;

        //定义一个字体样式
        IFont font = book.CreateFont();
        //将字体设为红色
        font.Color = IndexedColors.Red.Index;
        //font.FontHeightInPoints = 17;
        //将定义的font样式给到setborderdeth样式中
        setborderdeth.SetFont(font);

        //文字水平和垂直对齐方式
        setborderdeth.VerticalAlignment = VerticalAlignment.Center; //垂直居中
        setborderdeth.Alignment = HorizontalAlignment.Center; //水平居中
        setborderdeth.WrapText =  true ;   //自动换行

        //设置第一行单元格的高度为25
        row.HeightInPoints = 25;
        //设置单元格的值
        row.CreateCell(0).SetCellValue( "姓名" );
        //将style属性给到这个单元格
        row.GetCell(0).CellStyle = setborderdeth;
        row.CreateCell(1).SetCellValue( "电话" );
        row.GetCell(1).CellStyle = setborderdeth;

        //循环的导出到excel的每一行
        for ( int i = 0; i < Data.Count; i++)
        {
            //每循环一次,就新增一行  索引从0开始 所以第一次循环CreateRow(1) 前面已经创建了标题行为0
            IRow row1 = sheet.CreateRow(i + 1);
            row1.HeightInPoints = 21;
            //给新加的这一行创建第一个单元格,并且给这第一个单元格设置值 以此类推...
            row1.CreateCell(0).SetCellValue(Convert.ToString(Data[i].name));
            //先获取这一行的第一个单元格,再给其设置样式属性 以此类推...
            row1.GetCell(0).CellStyle = setborder;
            row1.CreateCell(1).SetCellValue(Data[i].phone);
            row1.GetCell(1).CellStyle = setborder;
        }
        System.IO.MemoryStream ms =  new System.IO.MemoryStream();
        book.Write(ms);
        ms.Seek(0, SeekOrigin.Begin);
        DateTime dttime = DateTime.Now;
        string datetime = dttime.ToString( "yyyy-MM-dd" );
        string filename =  "一卡通数据.xls" ;
        Response.AddHeader( "Content-Disposition" ,  "attachment; filename=" + filename);
        Response.BinaryWrite(ms.ToArray());
    #endregion

  

posted @ 2022-06-17 18:09  WantRemake  阅读(120)  评论(0编辑  收藏  举报