zoukankan      html  css  js  c++  java
  • 使用 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();
    
  • 相关阅读:
    【iCore1S 双核心板_ARM】例程六:WWDG看门狗实验——复位ARM
    【emWin】例程三十二:窗口对象———Progbar
    【iCore4 双核心板】DEMO V1.0 测试程序发布
    【iCore1S 双核心板_FPGA】例程二:GPIO输入实验——识别按键输入
    【iCore1S 双核心板_ARM】例程五:IWDG看门狗实验——复位ARM
    【emWin】例程三十一:窗口对象——Multipage
    【iCore1S 双核心板_ARM】例程四:USART通信实验——通过命令控制LED
    【iCore1S 双核心板_FPGA】例程一:GPIO输出实验——点亮LED
    【iCore1S 双核心板_ARM】例程三:EXTI中断输入实验——读取ARM按键状态
    【emWin】例程三十:窗口对象——Multiedit
  • 原文地址:https://www.cnblogs.com/sofire/p/1848841.html
Copyright © 2011-2022 走看看