最近项目中用到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----对象的单体模式

    对象的单体模式 为了解决箭头函数this指向的问题 推出来一种写法 对象的单体模式 1 var person = { 2 name:'小马哥', 3 age:12, 4 fav(){ 5 consol ...

  2. 爬虫之牛掰的scrapy框架

    一. Scrapy简介及安装 http://python.jobbole.com/86405/ Scrapy的详细介绍   1.简介   2.安装     1.window上安装:         先 ...

  3. leetcode [34] Find First and Last Position of Element in Sorted Array

    Given an array of integers nums sorted in ascending order, find the starting and ending position of ...

  4. 判断PC或mobile设备

    js 限制: <script type="text/javascript"> function uaredirect(f){try{if(document.getEle ...

  5. wait与sleep的区别

    1.这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类. sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际上还 ...

  6. memset与malloc性能测试(转)

    前一段跟同事聊项目组已有的一些工具,同事讲里面有太多的malloc与memset,对性能的影响比较大,因此今天就在自己的机器上测试了这两个函数,不多说,上数据.测试环境:2.2GHZ.2G内存mems ...

  7. android官方开发教程解释(一)

    最近准备系统学一下android开发,这里不会照搬原文,只会针对教程中一些难以理解的部分进行解释,我只是个菜鸟. 在教程第一章——入门基础里面,讲解android主题的那个小节,大概会有以下的代码: ...

  8. CS224n学习笔记(一)

    How do we have usable meaning in a computer? Represents the words as discrete symbols, (离散型变量) Use t ...

  9. echarts自定义图例legend文字和样式

    话不多说,先上效果图. 要完成这个图并不难,主要是下面那个图例比较难,需要定制. 让我们从官方文档找找思路,官方文档关于legend.formatter是这样的:链接在这 难点在于: 1.这里的图例文 ...

  10. 部署phpmyadmin登录不进去

    Centos7.5 部署phpmyadmin登录不进去 问题:明明输对了账号和密码就是登录不进去,但是用ip就能登录 解决方法:换个域名 [root@web01 code]# vim /etc/ngi ...