java导出excel表头跨行,java导出Excel并对表头做定制
1、核心代码
package cn.doofen.service.impl;
import java.io.OutputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.ss.util.CellRangeAddress;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.cicada.seo.query.impl.QryIntegReportImpl;
import com.doofen.ctrl.rpt.RptConst;
import com.doofen.ctrl.rpt.Impl.RptBase;
import com.zxt.framework.export.RptExcelDomain;
/**
*
* @author Andrew
*
* PulishDate: 2015年9月28日
* Function: 各科平均分比较表
* ChangeLog:
*/
public class ExportRpt10012Impl extends RptBase{
DecimalFormat df=new DecimalFormat("#.00");
private Object[] joHeads = null;
private Object[] joHeads2 = null;
/**
* 构建excel
* @param os
* @param examId
* @throws Exception
*/
public void createRptExcel_10012( OutputStream os, Long schId, Long examId , Long clsId, Long gradeId, JSONArray jarr, Long xueke, Long leibie) throws Exception{
QryIntegReportImpl opr = new QryIntegReportImpl();
String title = null;
if(leibie == 10){
title = "行政班——"+RptConst.RPT_2000_NAME;
}else if (leibie == 11){
title = "选课班——"+RptConst.RPT_2000_NAME;
}
try{
JSONArray ja = new JSONArray();
ja = opr.getExecutiveTable(schId, examId, clsId, gradeId, jarr, xueke, leibie);
RptExcelDomain rptDo = new RptExcelDomain();
rptDo.setSheetName( title);
rptDo.setSheetTitle( SHEET_TITLE+title );
//绘制表头
joHeads = ja.getJSONObject(0).getJSONArray( "xkTitle").toArray();
joHeads2 = ja.getJSONObject(0).getJSONArray( "secTitle").toArray();
//绘制表格内容行
JSONArray jaDatas = new JSONArray();
JSONArray joDatas = ja.getJSONObject(0).getJSONArray( "data");
jaDatas = setRowData( joDatas );
rptDo.setSheetData( jaDatas);
List sheets = new ArrayList();
sheets.add( rptDo);
setSheets( sheets);
writeExcel(os, true);
}catch( Exception e){
//e.printStackTrace();
}finally{
if (os != null ) os.close();
}
}
/**
* 构建数据excel结构
* @param joDatas
* @return
*/
private JSONArray setRowData( JSONArray joDatas ){
JSONArray result = new JSONArray(5);
for( int i = 0; i < joDatas.size(); i++){
JSONObject jo = joDatas.getJSONObject( i);
ArrayList arr = new ArrayList();
arr.add( jo.getString( "className"));
arr.add( jo.getString( "stuCount") == null? " ": jo.getString( "stuCount"));
arr.add( jo.getString( "clsSvg") == null? " ": jo.getString( "clsSvg"));
arr.add( jo.getString( "clsRank") == null||jo.getIntValue( "clsRank") == 9999? " ": jo.getString( "clsRank"));
arr.add( jo.getString( "clsSvg1") == null? " ": jo.getString( "clsSvg1"));
arr.add( jo.getString( "clsRank1") == null||jo.getIntValue( "clsRank1") == 9999? " ": jo.getString( "clsRank1"));
Object[] datas = jo.getJSONArray( "scores").toArray();
for( int j = 0; j < datas.length; j++){
Object v = datas[j];
if(v.equals(-1.0)){
arr.add( "");
}else{
arr.add( v);
}
}
JSONObject rjo = new JSONObject();
rjo.put( "data", arr);
rjo.put( "sort", jo.getString( "clsRank1") );
result.add( rjo);
}
return result;
}
/**
* 重载excel创建
*/
protected void writeExcelSheetSelf( RptExcelDomain rptDomain){
// 创建Excel的工作sheet,对应到一个excel文档的tab
HSSFSheet sheet = wb.createSheet( rptDomain.getSheetName());
// 设置excel每列宽度
sheet.setColumnWidth(0, 5000);
sheet.setColumnWidth(1, 3500);
int colCount = joHeads2.length + 6;
ArrayList headers = new ArrayList();
headers.add( "班级");
headers.add( "人数");
// 创建Excel的sheet的一行
HSSFRow row = sheet.createRow(0);
row.setHeight((short) rptDomain.getSheetTitleHeight());// 设定行的高度
// 创建一个Excel的单元格
HSSFCell cell_title = row.createCell(0);
// 合并单元格(startRow,endRow,startColumn,endColumn)
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, colCount-1));
// 给Excel的单元格设置样式和赋值
cell_title.setCellStyle( this.getStyleTitle());
cell_title.setCellValue( rptDomain.getSheetTitle());
/*---------------------------------------
* 创建sheet的列名
*--------------------------------------*/
HSSFCellStyle headerStyle = this.getStyleHeader();
row = sheet.createRow(1);
int baseL = headers.size();
for( int i = 0; i < baseL; i++){
HSSFCell cell_header = row.createCell(i);
// 给Excel的单元格设置样式和赋值
sheet.addMergedRegion(new CellRangeAddress(1, 2, i, i));
cell_header.setCellStyle( headerStyle);
cell_header.setCellValue( headers.get( i));
}
HSSFCell cell_header = row.createCell( baseL );
sheet.addMergedRegion(new CellRangeAddress(1, 1, baseL, baseL+1));
cell_header.setCellStyle( headerStyle);
cell_header.setCellValue( "总分平均分");
HSSFCell cell_header1 = row.createCell( baseL+2 );
sheet.addMergedRegion(new CellRangeAddress(1, 1, baseL+2, baseL+3));
cell_header1.setCellStyle( headerStyle);
cell_header1.setCellValue( "总分平均分(折后)");
int offset = baseL + 4;
for( int i = 0; i < joHeads.length; i++){
String head =(String) joHeads[i];
cell_header = row.createCell( offset );
int merge = new Integer( head.split("\\|")[1] );
sheet.addMergedRegion(new CellRangeAddress(1, 1, offset, offset+merge-1));
cell_header.setCellStyle( headerStyle);
cell_header.setCellValue( head.split("\\|")[0] );
offset = offset + merge;
}
row = sheet.createRow(2);
for( int i = 0; i < 3; i++ ){
cell_header = row.createCell(i);
cell_header.setCellStyle( headerStyle);
cell_header.setCellValue( " ");
}
cell_header = row.createCell(2);
cell_header.setCellStyle( headerStyle);
cell_header.setCellValue( "总分");
cell_header = row.createCell(3);
cell_header.setCellStyle( headerStyle );
cell_header.setCellValue( "排名");
cell_header = row.createCell(4);
cell_header.setCellStyle( headerStyle);
cell_header.setCellValue( "总分");
cell_header = row.createCell(5);
cell_header.setCellStyle( headerStyle );
cell_header.setCellValue( "排名");
for( int i = 0; i < joHeads2.length; i++ ){
cell_header = row.createCell(i+6);
cell_header.setCellStyle(headerStyle );
cell_header.setCellValue( (String)joHeads2[i] );
}
/*---------------------------------------
* 创建sheet的数据
*--------------------------------------*/
JSONArray datas = rptDomain.getSheetData();
//数据按照排名排序
List lst = new ArrayList();
for( int i = 0; i < datas.size(); i++){
JSONObject rowData = datas.getJSONObject( i);
Integer sort = rowData.getInteger( "sort");
lst.add(sort);
}
TableComparator tcomp = new TableComparator();
Collections.sort(lst, tcomp );
HSSFCellStyle cellStyle = this.getStyleCellDefault();
for( int s = 0; s < lst.size(); s++){
for( int i = 0; i < datas.size(); i++){
JSONObject rowData = datas.getJSONObject( i);
int sort = rowData.getIntValue( "sort");
if( sort == lst.get(s).intValue() ){
row = sheet.createRow( 3+s);
Object[] _cellDatas = rowData.getJSONArray( "data").toArray();
for( int j = 0; j < _cellDatas.length; j++){
HSSFCell cell_Data = row.createCell( j);
cell_Data.setCellStyle( cellStyle);
//cell_Data.setCellStyle( this.getStyleCellDefault());
// 给Excel的单元格设置样式和赋值
Object cellData = _cellDatas[j];
if( cellData == null ) continue;
if( "class java.lang.String".equalsIgnoreCase(cellData.getClass().toString())){
cell_Data.setCellValue( (String)cellData);
cell_Data.getCellStyle().setAlignment(HSSFCellStyle.ALIGN_RIGHT);
}
if( "class java.lang.Double".equalsIgnoreCase( cellData.getClass().toString())){
cell_Data.setCellValue( (Double)cellData);
}
if( "class java.lang.Integer".equalsIgnoreCase( cellData.getClass().toString())){
cell_Data.setCellValue( (Integer)cellData);
}
}//完成行数据装载
break;
}
}
}//完成排序筛选
}
}
java导出excel表头跨行,java导出Excel并对表头做定制相关推荐
- java使用poi读取跨行跨列excel
java使用poi读取跨行跨列excel 1.需求背景 2.实现思路分析 3.重要代码片码说明 4.完整的代码类如下: 5.完整的demo代码提供如下 6.demo执行结果 1.需求背景 最近有一个工 ...
- java 导出excel 列头,java 生成excel (多级表头)导出
依赖工具包 cn.hutool hutool-all 5.3.5 该工具包是对 Apache POI包的分装 private void export(HttpServletResponse respo ...
- Java实现Excel多表头动态数据导出
好久没时间写帖子了,由于工作需要,写一个基于JAVA实现的Excel多表头动态导出功能,首先可能这个叫法比较啰嗦,大家多担待下,下面我们先看看什么是Excel多表头动态导出(效果图): 它包含两部分: ...
- 如何用java完成Excel快速的导入导出
日常工作中,Excel是我们经常需要处理的文件,报表的生成,数据的导出,几乎每个项目都需要写对应的处理.作者也是编写这块代码大军的一员,能否有方法让我们不用重复编写代码呢,能否只要简单配置就可以完成我 ...
- java ajax 导出excel文件_springMVC(4)---生成excel文件并导出
springMVC(4)---生成excel文件并导出 在开发过程中,需要将数据库中的数据以excel表格的方式导出. 首先说明.我这里用的是Apache的POI项目,它是目前比较成熟的HSSF接口, ...
- java关于excel的导出_[转载]关于JAVA导出Excel
现在正在做的项目中涉及大量的Excel文件导出导入操作,都是使用Java Excel来操作. Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Exce ...
- Java基于注解和反射导入导出Excel
代码地址如下: http://www.demodashi.com/demo/11995.html 1. 构建项目 使用Spring Boot快速构建一个Web工程,并导入与操作Excel相关的POI包 ...
- java横向导出excel_利用Java进行Excel的数据导入导出
1. 引言 MS 的电子表格(Excel)是Office 的重要成员,是保存统计数据的一种常用格式.在一 个Java 应用中,将一部分数据生成Excel 格式,是与其他系统无缝连接的重要手段.在远程 ...
- JAVA实现Excel文件的导入导出
版权声明:请勿用于任何商业用途的文章转载,转载请说明出处! 1.导入POI的JAR包 <!-- excel POI --><dependency><groupId> ...
最新文章
- RabbitMQ指南(下)
- 生成学习、高斯判别、朴素贝叶斯—斯坦福ML公开课笔记5
- [BetterExplained]遇到问题为什么应该自己动手
- 计算机二级vb和vba,读取本机硬件信息的VBA代码
- css画个框,用CSS绘制带有边框的尖端
- git 怎么拉取线上代码到本地进行合并_android studio如何使用git提交、拉取、合并代码的操作...
- Oracle Create Profile
- cf1173 D. Nauuo and Circle
- t-sql中引号的使用规则 转
- python怎么修改默认路径_Python小知识之JupyterLab默认启动路径修改
- 51单片机矩阵键盘控制数码管
- C语言输入某年某月某日,判断这一天是这一年的第几天(含判断闰年)
- linux系统怎样进入图形界面,Linux系统中如何切换图形界面与字符界面
- sql left()函数
- matlab处理采集的声音数据
- 【设计模式】详解设计模式七大原则
- c语言搜索答案什么软件比较好,学C语言用什么最好?
- c语言字母存储,字符串在内存中的储存——C语言进阶
- 程序员都是这样关机的
- 条件变量基本概念和原理
热门文章
- 2021年7月15日记
- Python数据分析实战【第三章】2.8-时间模块:datetime【python】
- MediaPlayer和Mediacodec还有AudioTrack的关系
- 跟踪管理文档开发日记
- hive的udf,过滤表情等非法字符
- 一个人的旅游 hdu2066(多起点多终点 弗洛伊德算法)
- 神经辐射场NeRF之Instant-ngp环境搭建与应用
- [东拼西凑]STM32单片机启动流程及RAM和Flash的配置关系和堆栈溢出现象
- 如何理解时钟周期及公式CPU执行时间 = CPU时钟周期数/主频
- YOLO进行标签生成的注意点!