java合并sheet行_java poi Excel循环合并行
//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循环合并行相关推荐
- java读取合并单元格_Java POI常用方法,读取单元格的值,设置单元格格式,合并单元格,获取已合并的单元格,导出至本地等...
一.设置单元格格式. 设置单元格边框.单元格背景颜色.单元格对齐方式.单元格字体,设置自动换行. /** Description: 设置单元格格式. * @author : ys. * @date : ...
- java报表插件下载_java报表EXCEL下载方案
目录: 开发背景 开发思路 程序设计 如何调用 代码 总结 正文: 一. 开发背景 对于程序员特别是从事信息管理编程的程序员来说,报表打印是整个编程过程中最麻烦但又必须做的事情,我们常用的方法就是: ...
- java 表格 列删除_Java 删除Excel表格中的空白行或列
Java 删除Excel表格中的空白行和列 本文介绍在Java程序中如何来删除Excel表格中多余的空白行或者列. 使用工具:Free Spire.XLS for Java (免费版) Jar获取及导 ...
- java循环合并行_java导出excel时合并同一列中相同内容的行
public voidexpStatistics(String filePath,String campuscode) {try{ WritableWorkbook wwb= Workbook.cre ...
- java 导出批量图片_Java Poi 导出excel(含图片及多个sheet)
因为之前做的导出都是导出数据的基本信息不含图片的那种,一直也没做过导出图片的excel,正好这两天做这个需求就做了一个,好 废话不多说,直接上图 ,因为我这边是根据模板导出数据 先看下模板 然后上代码 ...
- java实现从excel中提取某行_Java读取excel表格(原理+实现)
一般都是用poi技术去读取excel表格的,但是这个技术又是什么呢 什么是Apache POI? Apache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office ...
- 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 ...
- java导出excel合并单元格_Java 导出Excel 合并Excel单元格
/** * 导出Excel表格 * * @param allList 要导出的数据 * @param headArr json键值对 * @param titleArr excel标题 * @pa ...
- java重命名sheet失败_java jxl excel 数据导出 重新命名无效的工作表名称 | 学步园...
今天在java中使用jxl导出数据到excel工作表的时候,无论是在线直接打开还是保存到本地再打开,都会提示下面的错误信息: "Excel在'excel.xls'中发现不可读取的内容.是否恢 ...
最新文章
- tensorflow deep_speech2 神经网络结构代码分析
- 超级全面的 SpringBoot 注解介绍,每一个用途都应该清晰
- 【Java8】@FunctionalInterface
- mysql日期可以保存时区_数据库存储时间的时区问题
- JS动态添加、删除classl类
- 笔记 Json语法 01
- mysql 正则 换行符_MySQL 正则表达式
- ActiveMQ代码示例
- C/C++的转义字符
- VS2012 打开项目后无法编辑
- 苹果6邮件服务器错了如何修改,苹果手机ID电子邮件设错了怎么改
- 现代控制理论课程实验二:利用状态观测器实现状态反馈的系统设计
- cadence 与ad DXF 转换 以及板框制作
- 模拟高清和数字高清摄像机的区别,全局快门CMOS 图像传感器,Interline Transfer CCD图像传感器
- 在这里,北上深成为“社科之城”
- pink老师 JS p61课后作业
- 电信物联卡网络怎么样_中国电信物联网专用卡(中国电信物联网卡怎么样)
- wallpaper动态壁纸软件
- 求数组所有非空子序列的和
- 计算机软考证书含金量和性价比分析
热门文章
- VUE中 ref $refs 使用详解,扩展到$parent 、$children 的使用
- java中为final变量赋值的几种方式
- live555推流rtsp_Hi3518 RTSP推流
- 15 - java 继承
- uniapp动态修改样式_掌握Photoshop图层样式技术
- linux错误码61,Linux编程中的错误码列表
- Java 多线程 —— AQS 详解
- linux shell 除法运算符,Linux shell 基本运算符详解
- Java基础 线程同步
- imgaug批量椒盐噪声 python_python图像扩增-imgaug