//Java poi 实现循环合并行,还是第一次遇到这种问题

//在网上查了很多资料,都不是自己想要的

//以下为自己研究后,写的一点东西,给大家分享,希望对大家能有思路上的启发,也希望大家能提出宝贵意见,相互学习,一起提高,谢谢

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;

import org.apache.poi.hssf.usermodel.HSSFFont;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.hssf.util.CellRangeAddress;

import org.apache.poi.hssf.util.Region;

//定义excel-sheet的数据显示

@SuppressWarnings("unchecked")

List> bodyList = (List>) model.get("body");

/***********************数据************************/

HSSFCellStyle style1 = workBook.createCellStyle();//数据样式设置

HSSFFont font1 = workBook.createFont();

style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中

style1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中

style1.setFont(font1);

int startRow = 0;//合并开始行号

int endRow = 0;//合并结束行号

double tspTotal = 0;//计算,合并的根据项的子项和的中间变量

double so2Total = 0;

double noxTotal = 0;

//数据第一行(因为有标题和表头,所以,数据行号从2开始)

int rowNum = 2;

//数据第一列

if(bodyList!=null && bodyList.size()>0){

//按照企业名称、相同的合并行,并计算企业的tsp、so2、nox的总量

for(int i=0;i

int bodyline = 0;

HSSFRow row = sheet.createRow(rowNum);

for(int j = 0;j

row.createCell(bodyline).setCellValue(bodyList.get(i).get(j));

row.getCell(bodyline).setCellStyle(style1);

bodyline++;

}

if(i != 0){

if(bodyList.get(i-1).get(0).equals(bodyList.get(i).get(0))){//两行的主项相等

tspTotal += Double.valueOf(bodyList.get(i-1).get(3).toString());

so2Total += Double.valueOf(bodyList.get(i-1).get(5).toString());

noxTotal += Double.valueOf(bodyList.get(i-1).get(7).toString());

endRow++;//则合并结束行号+1

if(i == bodyList.size()-1){//最后一行数据判断、合并行

tspTotal += Double.valueOf(bodyList.get(i).get(3).toString());

so2Total += Double.valueOf(bodyList.get(i).get(5).toString());

noxTotal += Double.valueOf(bodyList.get(i).get(7).toString());

sheet.getRow(rowNum - (endRow - startRow)).getCell(3).setCellValue(tspTotal);//企业TSP总量

sheet.getRow(rowNum - (endRow - startRow)).getCell(5).setCellValue(so2Total);//企业SO2总量

sheet.getRow(rowNum - (endRow - startRow)).getCell(7).setCellValue(noxTotal);//企业NOX总量

//企业名称

sheet.addMergedRegion(new CellRangeAddress(

startRow, //first row (0-based)

endRow, //last row (0-based)

0, //first column (0-based)

0 //last column (0-based)

));//合并单元格

//企业TSP总量

sheet.addMergedRegion(new CellRangeAddress(

startRow, //first row (0-based)

endRow, //last row (0-based)

3, //first column (0-based)

3 //last column (0-based)

));//合并单元格

//企业SO2总量

sheet.addMergedRegion(new CellRangeAddress(

startRow, //first row (0-based)

endRow, //last row (0-based)

5, //first column (0-based)

5 //last column (0-based)

));//合并单元格

//企业NOX总量

sheet.addMergedRegion(new CellRangeAddress(

startRow, //first row (0-based)

endRow, //last row (0-based)

7, //first column (0-based)

7 //last column (0-based)

));//合并单元格

}

}else{//两行的主项不相等时

tspTotal += Double.valueOf(bodyList.get(i-1).get(3).toString());

so2Total += Double.valueOf(bodyList.get(i-1).get(5).toString());

noxTotal += Double.valueOf(bodyList.get(i-1).get(7).toString());

if(startRow == endRow){

sheet.getRow(rowNum - 1).getCell(3).setCellValue(tspTotal);//企业TSP总量

sheet.getRow(rowNum - 1).getCell(5).setCellValue(so2Total);//企业SO2总量

sheet.getRow(rowNum - 1).getCell(7).setCellValue(noxTotal);//企业NOX总量

}else{

sheet.getRow(rowNum - (endRow - startRow) - 1).getCell(3).setCellValue(tspTotal);//企业TSP总量

sheet.getRow(rowNum - (endRow - startRow) - 1).getCell(5).setCellValue(so2Total);//企业SO2总量

sheet.getRow(rowNum - (endRow - startRow) - 1).getCell(7).setCellValue(noxTotal);//企业NOX总量

/******************************************根据计算出的开始行号和结束行号开始合并*****************************************/

//企业名称

sheet.addMergedRegion(new CellRangeAddress(

startRow, //first row (0-based)

endRow, //last row (0-based)

0, //first column (0-based)

0 //last column (0-based)

));//合并单元格

//企业TSP总量

sheet.addMergedRegion(new CellRangeAddress(

startRow, //first row (0-based)

endRow, //last row (0-based)

3, //first column (0-based)

3 //last column (0-based)

));//合并单元格

//企业SO2总量

sheet.addMergedRegion(new CellRangeAddress(

startRow, //first row (0-based)

endRow, //last row (0-based)

5, //first column (0-based)

5 //last column (0-based)

));//合并单元格

//企业NOX总量

sheet.addMergedRegion(new CellRangeAddress(

startRow, //first row (0-based)

endRow, //last row (0-based)

7, //first column (0-based)

7 //last column (0-based)

));//合并单元格

}

startRow = rowNum;//为下次合并做准备,把合并开始行号赋值为下一行开始号

endRow = rowNum;//合并结束行同合并开始行

tspTotal = 0;//为中间值初始化

so2Total = 0;

noxTotal = 0;

}

}

rowNum++;

}

sheet.setColumnWidth(0,15*2*256);//第一列宽度

sheet.setColumnWidth(1,15*2*256);//第二列宽度

sheet.autoSizeColumn((short)8); //自动列宽(第九列)

}

java合并sheet行_java poi Excel循环合并行相关推荐

  1. java读取合并单元格_Java POI常用方法,读取单元格的值,设置单元格格式,合并单元格,获取已合并的单元格,导出至本地等...

    一.设置单元格格式. 设置单元格边框.单元格背景颜色.单元格对齐方式.单元格字体,设置自动换行. /** Description: 设置单元格格式. * @author : ys. * @date : ...

  2. java报表插件下载_java报表EXCEL下载方案

    目录: 开发背景 开发思路 程序设计 如何调用 代码 总结 正文: 一. 开发背景 对于程序员特别是从事信息管理编程的程序员来说,报表打印是整个编程过程中最麻烦但又必须做的事情,我们常用的方法就是: ...

  3. java 表格 列删除_Java 删除Excel表格中的空白行或列

    Java 删除Excel表格中的空白行和列 本文介绍在Java程序中如何来删除Excel表格中多余的空白行或者列. 使用工具:Free Spire.XLS for Java (免费版) Jar获取及导 ...

  4. java循环合并行_java导出excel时合并同一列中相同内容的行

    public voidexpStatistics(String filePath,String campuscode) {try{ WritableWorkbook wwb= Workbook.cre ...

  5. java 导出批量图片_Java Poi 导出excel(含图片及多个sheet)

    因为之前做的导出都是导出数据的基本信息不含图片的那种,一直也没做过导出图片的excel,正好这两天做这个需求就做了一个,好 废话不多说,直接上图 ,因为我这边是根据模板导出数据 先看下模板 然后上代码 ...

  6. java实现从excel中提取某行_Java读取excel表格(原理+实现)

    一般都是用poi技术去读取excel表格的,但是这个技术又是什么呢 什么是Apache POI? Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office ...

  7. java excel 多sheet页_java导入excel操作多sheet页上传

    依赖包 cn.afterturn easypoi-base 3.0.1 cn.afterturn easypoi-web 3.0.1 cn.afterturn easypoi-annotation 3 ...

  8. java导出excel合并单元格_Java 导出Excel 合并Excel单元格

    /** * 导出Excel表格 * * @param allList  要导出的数据 * @param headArr  json键值对 * @param titleArr excel标题 * @pa ...

  9. java重命名sheet失败_java jxl excel 数据导出 重新命名无效的工作表名称 | 学步园...

    今天在java中使用jxl导出数据到excel工作表的时候,无论是在线直接打开还是保存到本地再打开,都会提示下面的错误信息: "Excel在'excel.xls'中发现不可读取的内容.是否恢 ...

最新文章

  1. tensorflow deep_speech2 神经网络结构代码分析
  2. 超级全面的 SpringBoot 注解介绍,每一个用途都应该清晰
  3. 【Java8】@FunctionalInterface
  4. mysql日期可以保存时区_数据库存储时间的时区问题
  5. JS动态添加、删除classl类
  6. 笔记 Json语法 01
  7. mysql 正则 换行符_MySQL 正则表达式
  8. ActiveMQ代码示例
  9. C/C++的转义字符
  10. VS2012 打开项目后无法编辑
  11. 苹果6邮件服务器错了如何修改,苹果手机ID电子邮件设错了怎么改
  12. 现代控制理论课程实验二:利用状态观测器实现状态反馈的系统设计
  13. cadence 与ad DXF 转换 以及板框制作
  14. 模拟高清和数字高清摄像机的区别,全局快门CMOS 图像传感器,Interline Transfer CCD图像传感器
  15. 在这里,北上深成为“社科之城”
  16. pink老师 JS p61课后作业
  17. 电信物联卡网络怎么样_中国电信物联网专用卡(中国电信物联网卡怎么样)
  18. wallpaper动态壁纸软件
  19. 求数组所有非空子序列的和
  20. 计算机软考证书含金量和性价比分析

热门文章

  1. VUE中 ref $refs 使用详解,扩展到$parent 、$children 的使用
  2. java中为final变量赋值的几种方式
  3. live555推流rtsp_Hi3518 RTSP推流
  4. 15 - java 继承
  5. uniapp动态修改样式_掌握Photoshop图层样式技术
  6. linux错误码61,Linux编程中的错误码列表
  7. Java 多线程 —— AQS 详解
  8. linux shell 除法运算符,Linux shell 基本运算符详解
  9. Java基础 线程同步
  10. imgaug批量椒盐噪声 python_python图像扩增-imgaug