当前位置: 首页 > news >正文

使用 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();

 

转载于:https://www.cnblogs.com/sofire/archive/2010/10/12/1848841.html

相关文章:

  • WPF Browser 中如何获取当前路径(临时文件中)?
  • 10+优秀“分步引导”jQuery插件(转)
  • 用processing画李萨如曲线
  • MVC笔记 初识模型(二)
  • android 手机网络接入点名称及WAP、NET模式的区别
  • 金蝶osf接口开发_金蝶云·星辰 | ?小微企业服务成长平台
  • 小程序商店刷榜_怎么注册微信小程序商店
  • 中getname_【136期】你能谈谈Java中 synchronized 对象锁和类锁的区别
  • 加到service中无效_给 COLA 做减法:应用架构中的“弯弯绕设计”
  • set集合 结构体_Swift - 集合(Set)使用详解(附样例)
  • 前端动态获取servlet虚拟路径_Servlet 过滤器和异常处理
  • access中下划线是font_Python中的模块及扩展库
  • mac vs 返回上一步_Figma:使用mac上的字体 | 转换ttc字体文件
  • cmd 访问url_「图解」创建第一个django应用、配置并访问
  • 周星驰经典超清图片_周星驰与刘德华究竟谁更火?为何30年没合作?看王晶的评价...
  • 分享一款快速APP功能测试工具
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • eclipse(luna)创建web工程
  • Git学习与使用心得(1)—— 初始化
  • HTTP--网络协议分层,http历史(二)
  • Mocha测试初探
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Python socket服务器端、客户端传送信息
  • Vue.js源码(2):初探List Rendering
  • 多线程 start 和 run 方法到底有什么区别?
  • 复杂数据处理
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • Prometheus VS InfluxDB
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • $L^p$ 调和函数恒为零
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (3)(3.5) 遥测无线电区域条例
  • (二)构建dubbo分布式平台-平台功能导图
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (一)VirtualBox安装增强功能
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (原創) 未来三学期想要修的课 (日記)
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)大型网站的系统架构
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .net refrector
  • .net对接阿里云CSB服务
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET开发不可不知、不可不用的辅助类(一)