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); //自动列宽(第九列)

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java类中自定义函数的调用_关于方法:自定义类中对函数的未解析引用

我无法解决看似微不足道的问题。我的问题可能是缺乏对Kotlin语言的经验(和理解)。不过,我将需要帮助。我做了一个自定义类,其中包含一个自定义函数。看起来很简单,但是当我尝试使用此功能时,我一直收到"未解决的引用"错…

java正则表达式 分词_[Java]使用正则表达式实现分词

手工分词稍嫌麻烦,不好维护,而利用正则表达式就利索多了。Java提供了java.util.regex.Matcher,java.util.regex.Pattern类来帮助我们实现此功能。例一:以下程序将把"This is a farm that that raises dairy cattle."中的…

as和java什么关系_深入理解happens-before和as-if-serial语义

概述本文大部分整理自《Java并发编程的艺术》,温故而知新,加深对基础的理解程度。指令序列的重排序我们在编写代码的时候,通常自上而下编写,那么希望执行的顺序,理论上也是逐步串行执行,但是为了提高性能&a…

java产生字符函数_java生成字符串md5函数类(javaSE)

//实现生成MD5值import java.io.BufferedInputStream;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.securi…

java atomiclong 使用_Java并发AtomicLongArray类

全屏java.util.concurrent.atomic.AtomicLongArray类提供了可以原子读取和写入的底层long类型数组的操作,并且还包含高级原子操作。 AtomicLongArray支持对基础long类型数组变量的原子操作。 它具有获取和设置方法,如在变量上的读取和写入。 也就是说&am…

memcached client for java api,Memcached Client Forjava API

java_memcached-release 关键类及方法整理说明如下。 SockIOPool 这个类用来创建管理客户端和服务器通讯连接池,客户端主要的工作包括数据通讯、服务器定位、hash 码生成等都是由这个类完成的。 1.public static SockIOPool getInstance() 获得连接池的单态方…

对于JAVA的总结800字,java试用期转正工作总结500字

【www.gz85.com - 试用期工作总结500字】java试用期转正工作总结一年的时间,每当自己在总结它的时候,感觉是那么的短暂—弹指一挥间.而也就是在这一挥间,承载着太多太多,有收获与成就,有失败与不足.回头看看2012年的足迹,伴随着自己一年的是学习与坚持.2016年伊始是通过分销资源…

rtrim php,php rtrim() 格式化中文问题

先看以下代码var_dump(rtrim("互联网产品、", "、"));我们以为会得到结果 "互联网产品", 但实际上获得的是 ""互联网产��"为什么呢, 其实这是编码引起的问题.rtrim()这个函数在处理字符时是按照ascii编码来…

java gbk汉字 10进制,用java程序将GBK字符转成UTF-8编码格式

UTF-8 采用变长度字节来表示字符,理论上最多可以到 6 个字节长度(一个字符六个字节)。UTF-8 编码兼容了 ASC II(0-127), 也就是说 UTF-8 对于 ASC II 字符的编码是和 ASC II 一样的。对于超过一个字节长度的字符,才用以下编码规范&#xff1a…

我的世界java版刷雪球机,我的世界手机版怎么刷雪球 无限刷雪球机

随着全球变暖,厄尔尼诺现象加剧,一些生活在亚热带的孩子越来越感受不到下雪的喜悦,雪场的票子也是难求!不过不要着急,Minecraft给你模拟了一个生存的环境,在这里,你可以和好友联机打雪仗&#x…

php请求api获取返回值,我用curl请求接口获取返回值,但是不成功,大神给看看怎么调取?...

接口地址 http://mp.vservice.com.cn/service/OutWebService?wsdl接口调用方callService(String serviceName,String servId,String secretKey,String xmlInfo)参数名称 传值serviceName:OAuthservId :服务号idsecretKey :服务号秘钥xmlInfo…

对于单输入多输出系统matlab,求助!!如何把多输入多输出系统的传函转换为状态空间表达式?...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼这个对应的是单输入单输出的。多输入多输出的如下:% Thansfer multiple transfer functions into sate space modelsclcclear all;% Step1:输入传递函数分子分母系数%From u1 to y1num1[-0.0006086 -7.715e-…

matlab的fftn,matlab fftn

(X,m,n) fftn 进行 n 维快速傅立叶变换(反变换用 ifftn) 语法:Yffn(X) \\ Yfftn(X,siz) fftshift 快速傅立叶变换的 DC 组件移到光谱中心 语法:......(X,m,n) fftn 进行 n 维快速傅立叶变换(反变换用 ifftn) 语法:Yffn(X) \\ Yfftn(X,siz) fftshift 快速傅立叶变换的 DC 组件移…

php catch e是什么,php try catch 中的catch(Exception $e) 中的Exception 有什么作用?

首先很明确的是 try ... catch ... 是一个语言结构。那既然如此就不能用函数参数类型限定的方式去理解 catch 后面的括号里的 Exception 了。如果这里没有 Exception,比如这样写:try {} catch ($e) {}你会得到一个错误:Parse error: parse er…

java udp 心跳,udp简略通讯示例-心跳示例

当前位置:我的异常网 软件架构设计 udp简略通讯示例-心跳示例udp简略通讯示例-心跳示例www.myexceptions.net 网友分享于:2013-09-04 浏览:44次udp简单通讯示例---心跳示例//发送心跳new UDPToPointCenter(18056).start();public class UDPToPointCen…

php如何随机显示图片,php中随机显示图片的函数代码_php

/*********************************************** Filename : img.php* Author : freemousehttp://www.gaodaima.com/?p49284php中随机显示图片的函数代码_php* web : www.cnphp.info* email :freemouse1981gmail.com* Date : 2010/12/27* Usage:* * **********************…

php数组里面写路径,使用路径在PHP数组中进行递归搜索

我会尝试清理一下,但这有效:$needle ["chapter one", foo, bar];$array [["name" > "Intro","id" > "123","children" > ["name" > "foo","id" > &qu…

matlab时域分析论文,基于Matlab语言的数字信号时域相关性研究与分析.doc

摘要:针对在工程测试信号处理过程中广泛存在的信号之间的相关性问题,本文将研究和分析信号之间不同形式的相关关系以及信号在时域中的相关性。从而揭示了信号间关联程度的内在规律。通过举出实例来展示信号相关分析技术在实际工程中的具体应用。最后通过…

php 图片 byte数组,php – 将图像存储在PostgreSQL数据库的bytea字段中

TL; DR:删除addslashes($data).这里多余.双重逃避..两次$datafread($p,filesize($fi));$dataaddslashes($data);$dat pg_escape_bytea($data);您读取数据,将其转义为字符串文字,然后将其转换为bytea八进制或十六进制转义.即使pg_escape_bytea是理智的,它也不会那样,…

页面显示其他php,php – 分页在所有其他页面上显示来自第1页的相同帖子

终于解决了这个:function my_filter_where( $where ) {global $wp_query;if (is_array($wp_query->query_vars[post_status])) {if (in_array(future,$wp_query->query_vars[post_status])) {// posts today into the future$where . " AND post_date …