最近项目中用到poi生成Excel时,用到了单元格合并,于是参考了http://www.anyrt.com/blog/list/poiexcel.html写的文章,但是其中有些地方不是很清楚,于是自己琢磨了一下,实现了功能,并在此记录一下:

        int index = 3 ;
             String lastCell = "";
             String thisCell = "";
             int lastRowIndex = 0;
             while(rs.next()){//每行
                 poiExcel.setCellIntValue(0, index, 0, (index-2));
                 for(int i = 0 ; i<array.length ;i++){//每列
                     colum = array[i];
                     if("F_SJDW".equals(colum) || "F_XMPC".equals(colum) || "F_DW".equals(colum)){//字符类型
                         poiExcel.setCellStringValue(0 , index , i+1 , "null".equals(""+rs.getString(colum))?" ":rs.getString(colum) );
                     }else if("F_YEAR".equals(colum)){//合并单元格
                         thisCell = "null".equals(""+rs.getString(colum))?" ":rs.getString(colum);
 //                        poiExcel.setCellStringValue(0 , index , i+1 , thisCell);
                     }else{//数字类型
                         poiExcel.setCellDoubleValue(0 , index , i+1 , "null".equals(""+rs.getString(colum))? 0 :rs.getDouble(colum) );
                     }
                 }

                  if(!thisCell.equals(lastCell)){//上一次的值和当前的值不相等
                     if(index == 3){//设置初始值
                         lastCell = thisCell;
                         lastRowIndex = index;
                     }else{
                         poiExcel.getSheet(0).addMergedRegion(new CellRangeAddress(lastRowIndex,index-1,(short)2,(short)2));
                         poiExcel.setCellStringValue(0 , lastRowIndex , 2 , lastCell);
                         lastCell = thisCell;//记录最后的值
                         lastRowIndex = index;
                     }
                 }
                 index++;
             }
             if(index>3){
                 poiExcel.getSheet(0).addMergedRegion(new CellRangeAddress(lastRowIndex,index-1,(short)2,(short)2));
                 System.out.println(lastRowIndex);
                 poiExcel.setCellStringValue(0 , lastRowIndex , 2 , lastCell);
             }

说明“:

合并单元格的关键性代码为:

poiExcel.getSheet(0).addMergedRegion(new CellRangeAddress(lastRowIndex,index-1,(short)2,(short)2));

第一个参数lastRowIndex:起始行号,二个参数为终止行号,第三个参数为起始列,第四个参数为终止列,其中行的范围和列的范围皆为闭区间。

向合并单元格中写入值分为两种情况:(1)可以先每行都写入值,然后在进行合并单元格(2)先合并单元格,然后在合并后的第一个单元格中写入值,个人推荐使用第二种。
												

1.0 poi单元格合合并及写入的更多相关文章

  1. POI 单元格

    OI 单元格合并中的CellRangeAddress 参数: CellRangeAddress(int, int, int, int) 参数:起始行号,终止行号, 起始列号,终止列号 sheet.ad ...

  2. 如何让elemengUI中的表格组件相同内容的单元格自动合并

    1. 前言 这两天在工作中遇到这样一个需求:将某个Excel中的数据在页面上以表格形式展示出来,并且尽量保持数据层级与Excel中一致.在原始Excel文件中,对每一行相同的数据都进行了合并,使得数据 ...

  3. 使用js方法将table表格中指定列指定行中相同内容的单元格进行合并操作。

    前言 使用js方法对html中的table表格进行单元格的行列合并操作. 网上执行此操作的实例方法有很多,但根据实际业务的区别,大多不适用. 所以在网上各位大神写的方法的基础上进行了部分修改以适合自己 ...

  4. POI单元格添加公式以及读取公式结果的值

    POI提供了为单元格添加条件样式的方法,但是我并没有找到获取单元格改变后样式的方法,获取到样式依旧是没有改变之前的. 比如为单元格添加条件样式用于监听单元格值是否被修改,如果单元格值被修改那么字体颜色 ...

  5. 葡萄城报表 SP2 新特性(1)— 单元格智能合并

    中国式复杂报表的布局,因为数据的动态性和结构性,导致其布局往往是无规律,且在设计时无法预测的,如单元格合并,通常不仅希望在每一列的数据展现中,能够根据需要自动将相同的单元格合并,且每个单元格之间该属性 ...

  6. jQuery实现HTML表格单元格的合并功能

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. freemarker实现单元格动态合并-行合并

    项目需求:项目中有个需求,需要将一些数据库中的数据根据需求导出,生成一个word,研究了一些技术,其中包括POI.freemaker,对比了一下实现过程及技术难度没最终使用了freemaker; 原始 ...

  8. DW 做一个table表 对单元格进行合并

    编辑前的代码 <body> <table width="500" border="0" bgcolor='#000000' backgroun ...

  9. Java POI单元格使用心得

    1: /** * Created by liuguangxin on 2018/5/16. * <p> * MergeRegion:表示excel中cell的信息,startRow与end ...

随机推荐

  1. vue打包报内存溢出

    vue-cli 构建的项目:package.json 文件里修改: "build": "node build/build.js" 修改为: "buil ...

  2. linux--- sort,uniq,cut,wc命令

    1.sort [-fbMnrtuk] [file or stdin] -f :忽略大小写的差异,例如 A 与 a 视为编码相同: -b :忽略最前面的空格符部分: -M :以月份的名字来排序,例如 J ...

  3. Python进阶【第一篇】:Python简介

    Python简介 1.Python的由来 Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. 2.C 和 Python.Ja ...

  4. Modbus库开发笔记之一:实现功能的基本设计(转)

    源: Modbus库开发笔记之一:实现功能的基本设计

  5. Error: could not open `C:\Java\jre7\lib\amd64\jvm.cfg'

    在运行cmd黑窗口时候出现:Error: could not open `C:\Java\jre7\lib\amd64\jvm.cfg'这样的错误的时候,本人没有删除任何文件,只是重新配置了一下jdk ...

  6. CentOS 4.8/OEL4.8 配置本地yum

    下载createrepo包并安装 下载地址: ftp://195.220.108.108/linux/dag/redhat/el4/en/i386/dag/RPMS/createrepo-0.4.6- ...

  7. Python3 离线安装TensorFlow包

    Python3 离线安装TensorFlow包 1,下载包 官网地址:https://pypi.org/project/tensorflow/1.1.0rc2/#files 清华镜像:https:// ...

  8. windows线程池之I/O完成端口(IOCP)

    对于这个学习主要参考博客 http://blog.csdn.net/neicole/article/details/7549497

  9. topcoder srm 689 div1 -3

    1.给出一个$2*n$的矩阵,只包含小写字母.重新排列各个元素使得任意两个相邻的元素不相同? 思路:按照每种字符的数量降序排序,然后从多到少依次放每一种.放的时候一上一下交错放置. #include ...

  10. VS2015密钥

    Visual Studio Professional 2015简体中文版(专业版)KEY:HMGNV-WCYXV-X7G9W-YCX63-B98R2Visual Studio Enterprise 2 ...