• 使用 NPOI 导出数据示例


    直接上代码,代码中有详细的注释。这个东西可真“别扭”(对多数 .NET 来讲,他们喜欢优雅、直接、明了、带注释、智能提示的编码方式)

    官网:http://npoi.codeplex.com/

    中文教程(旧版):http://www.cnblogs.com/tonyqus/archive/2009/04/12/1434209.html

                     //- 创建 Excel
                        HSSFWorkbook hssfworkbook = new HSSFWorkbook();
                        //- 创建 Sheet
                        var sheet = hssfworkbook.CreateSheet("淘汰选项报表");
    
                        //- Sheet 里的每一个 Row
                        NPOI.SS.UserModel.Row row;
                        //- 创建一个“绘画器”,这个绘画器用于所有的图片写入。
                        //- 请注意,是所有的图片,不可一张图片创建一个!否则将导致没有图片
                        var patriarch = sheet.CreateDrawingPatriarch();
    
                        //- 默认单元格的样式以及字体,是“Excel 级”的,如果对其进行设置,将导致所有的单元格都是这些字体以及样式
                        //- 创建一个新的字体以及样式,可以确保这些“单元格”独立的字体与样式。
                        //- 这里是创建一个标题的样式
                        var cellFont = hssfworkbook.CreateFont();
                        var cellStyle = hssfworkbook.CreateCellStyle();
    
                        //- 加粗,白色前景色
                        cellFont.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.BOLD;
                        cellFont.Color = NPOI.HSSF.Util.HSSFColor.WHITE.index;
    
                        //- 很费解 FillForegroundColor 这个属性,我设置了是背景色,可从字义上来说,这个似乎叫“前景色”?
                        //- 更令人无语的是,还有 FillBackgroundColor 属性。真不知道做什么的。
                        cellStyle.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.GREY_40_PERCENT.index;
                        //- 这个是填充的模式,可以是网格、花式等。如果需要填充单色,请使用:SOLID_FOREGROUND
                        cellStyle.FillPattern = NPOI.SS.UserModel.FillPatternType.SOLID_FOREGROUND;
                        //- 设置这个样式的字体,如果没有设置,将与所有单元格拥有共同字体!
                        cellStyle.SetFont(cellFont);
    
                        for(int i = 0 ; i <= gridView1.RowCount ; i++)
                        {//- 遍历行 这是 GridControl 控件的 GridView,i <= gridView1.RowCount的原因是首行我们设置为 标题行
    
                            row = sheet.CreateRow(i);
                            foreach(GridColumn column in gridView1.Columns)
                            {
                                //- 确保只需要显示的列
                                if(column.Visible)
                                {
                                    //- 创建当前 row 指定列索引的 cell
                                    NPOI.SS.UserModel.Cell cell = row.CreateCell(column.VisibleIndex);
                                    //- 标题行
                                    if(i == 0)
                                    {
                                        row.HeightInPoints = 50f;           //- 设置行高  row.Height 需要 乘以 20
                                        cell.SetCellValue(column.Caption); ; //-设置单元格内容
                                        cell.CellStyle = cellStyle;         //- 设置单元格的独立样式
                                    }
                                    else
                                    {
                                        row.HeightInPoints = 100f;          // 设置行高  row.Height 需要 乘以 20
                                        object value = gridView1.GetRowCellValue(i - 1, column);
    
                                        //- 如果是一个图片
                                        if(value != null && value.GetType() == typeof(byte[]))
                                        {
                                            sheet.SetColumnWidth(column.VisibleIndex, 50 * 256);//- 设置列宽,需要 乘以 256
    
                                            //- 插入图片到 Excel,并返回一个图片的标识
                                            var pictureIdx = hssfworkbook.AddPicture((byte[])value, NPOI.SS.UserModel.PictureType.JPEG);
    
                                            //- 创建图片的位置
                                            var anchor = new HSSFClientAnchor(
                                                0, 0,                               //- 上左 到 上右 的位置,是基于下面的行列位置
                                                0, 0,                               //- 下左 到 下右 的位置,是基于下面的行列位置
                                                column.VisibleIndex, i,
                                                column.VisibleIndex + 1, i + 1);
                                            //- 图片输出的位置这么计算的:
                                            //- 假设我们要将图片放置于第 5(E) 列的第 2 行 
                                            //- 对应索引为是 4 : 1 (默认位置)
                                            //- 放置的位置就等于(默认位置)到(默认位置各自加上一行、一列)
    
    
                                            patriarch.CreatePicture(anchor, pictureIdx);//- 使用绘画器绘画图片
                                        }
                                        else
                                        {
                                            cell.SetCellValue(value.ToStringOrEmpty());
                                        }
                                    }
                                    //- 居中
                                    cell.CellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.CENTER;
                                    cell.CellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER;
    
                                    //- 细边缘
                                    cell.CellStyle.BorderBottom = NPOI.SS.UserModel.CellBorderType.THIN;
                                    cell.CellStyle.BorderLeft = NPOI.SS.UserModel.CellBorderType.THIN;
                                    cell.CellStyle.BorderRight = NPOI.SS.UserModel.CellBorderType.THIN;
                                    cell.CellStyle.BorderTop = NPOI.SS.UserModel.CellBorderType.THIN;
    
                                    cell.CellStyle.BottomBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index;
                                    cell.CellStyle.LeftBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index;
                                    cell.CellStyle.RightBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index;
                                    cell.CellStyle.TopBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index;
                                }
                            }
    
                        }
    
                        FileStream file = new FileStream(fileName, FileMode.Create);
                        hssfworkbook.Write(file);//- 保存
                        file.Close();
    
  • 相关阅读:
    洛谷—— P2234 [HNOI2002]营业额统计
    BZOJ——3555: [Ctsc2014]企鹅QQ
    CodeVs——T 4919 线段树练习4
    python(35)- 异常处理
    August 29th 2016 Week 36th Monday
    August 28th 2016 Week 36th Sunday
    August 27th 2016 Week 35th Saturday
    August 26th 2016 Week 35th Friday
    August 25th 2016 Week 35th Thursday
    August 24th 2016 Week 35th Wednesday
  • 原文地址:https://www.cnblogs.com/sofire/p/1848841.html
Copyright © 2020-2023  润新知