/**

* 导出Excel表格

*

* @param allList  要导出的数据

* @param headArr  json键值对

* @param titleArr excel标题

* @param title    Excel名字

* @param mergeColumn  要合并的列

*/

public void exportExcel(JSONArray allList, String[] headArr, String title, String[] titleArr,int[] mergeColumn, HttpServletResponse response) {

try {

//通过Response把数据以Excel格式保存

response.reset();

response.setContentType("application/msexcel;charset=UTF-8");

response.addHeader("Content-Disposition", "attachment;filename=\""

+ new String((title + ".xls").getBytes("GBK"),

"ISO8859_1") + "\"");

OutputStream out = response.getOutputStream();

WritableWorkbook workbook = Workbook.createWorkbook(out);

WritableSheet sheet = workbook.createSheet(title, 0);

WritableFont wf = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD, false,

UnderlineStyle.NO_UNDERLINE, Colour.BLACK);

WritableCellFormat wcf = new WritableCellFormat(wf);

wcf.setVerticalAlignment(VerticalAlignment.CENTRE);

wcf.setAlignment(Alignment.CENTRE);

//CellView cellView = new CellView();

for (int i = 0; i

Label label = new Label(i, 0, titleArr[i],wcf);

sheet.addCell(label);

//                CellView cellView = new CellView();

//                cellView.setAutosize(true); //设置自动大小

//                sheet.setColumnView(i, cellView);//根据内容自动设置列宽

}

long s1 = System.nanoTime();

//格式化数据,垂直居中,和水平居中

WritableCellFormat cellFormat = new WritableCellFormat();

cellFormat.setAlignment(Alignment.CENTRE);

cellFormat.setVerticalAlignment(VerticalAlignment.CENTRE);

for (int i = 0; i

for (int j = 0; j

Label label = new Label(j, i + 1, JSONObject.fromObject(allList.get(i)).get(headArr[j]) == null ? "" : JSONObject.fromObject(allList.get(i)).get(headArr[j]).toString());

label.setCellFormat(cellFormat);

sheet.addCell(label);

//                    CellView cellView = new CellView();

//                    cellView.setAutosize(true); //设置自动大小

//                    sheet.setColumnView(i, cellView);//根据内容自动设置列宽

}

}

//前一行数据

String[] pre_RowData=new String[headArr.length];

//记住第一行数据

for(int i=0;i

pre_RowData[i]= sheet.getCell(i,1).getContents().toString();

}

//循环要合并得列

for(int i=0;i

int count=0;

//获取所有的行数,因为第一行是表头,所以从第二行开始,即j=1开始

for(int j=1;j

//从第二行开始,合并的时候,判断前一行是否相等,若相等,则这一列数据相等,才合并,若不相等,这一列数据相等也不合并

if(i>0&&j>1){

//判断这个单元格前一个单元格的值与这个单元格前一个单元格的上一个单元格的值是否相等

if(sheet.getCell(mergeColumn[i-1],j).getContents().equals(pre_RowData[i-1])){

//判断这个单元格的值与这个单元格的上一个单元格的值是否相等

if(sheet.getCell(mergeColumn[i],j).getContents().equals(pre_RowData[i])){

count++;

}else {

pre_RowData[i]=sheet.getCell(mergeColumn[i],j).getContents();

j--;

//合并单元格

sheet.mergeCells(mergeColumn[i],j-count+1,mergeColumn[i],j);

count=0;

}

}

//前两行单元格的值不相等时,则应合并以上本单元格中相等的单元格

else {

pre_RowData[i]=sheet.getCell(mergeColumn[i],j).getContents();

pre_RowData[i-1]=sheet.getCell(mergeColumn[i-1],j).getContents();

j--;

//合并单元格

sheet.mergeCells(mergeColumn[i],j-count+1,mergeColumn[i],j);

count=0;

}

//第一列到最后时,需要对以上相同的进行合并

if(j+1==sheet.getRows()){

sheet.mergeCells(mergeColumn[i],j-count+1,mergeColumn[i],j);

count=0;

//第一列比较结束,重新给pre_RowData赋值,以便对下一列进行比较时

pre_RowData[i]=sheet.getCell(i,1).getContents();

}

}else{

//判断这个单元格的值与这个单元格的上一个单元格的值是否相等

if(sheet.getCell(mergeColumn[i],j).getContents().equals(pre_RowData[i])){

count++;

}else {

pre_RowData[i]=sheet.getCell(mergeColumn[i],j).getContents();

j--;

//合并单元格

sheet.mergeCells(mergeColumn[i],j-count+1,mergeColumn[i],j);

count=0;

}

//第一列到最后时,需要对以上相同的进行合并

if(j+1==sheet.getRows()){

sheet.mergeCells(mergeColumn[i],j-count+1,mergeColumn[i],j);

count=0;

//重新给pre_RowData赋值,以便第二次比较时,比较前一单元格

pre_RowData[i]=sheet.getCell(i,1).getContents();

}

}

}

}

workbook.write();

workbook.close();

long s2 = System.nanoTime();

System.out.println("jxl write ......." + " rows to excel:" + (s2 - s1));

} catch (RowsExceededException e) {

e.printStackTrace();

} catch (WriteException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

java导出excel合并单元格_Java 导出Excel 合并Excel单元格相关推荐

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

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

  2. java导出文件到excel文件怎么打开_Java导出数据到Excel文件

    Java导出数据到Excel文件需要的jar包:easypoi-0.1.3.jar, poi-3.7-20101029 package com.sais.inkaNet.reportStatistic ...

  3. java如何调用系统保存框_java使用poi实现excel导出之后如何弹出保存提示框

    无论使用poi还是使用jxl导出excel都需要用到流 一种是outputstrean,另一种fileoutputstream 第一种:如果想要弹出保存的提示框必须加入下列三句 response.se ...

  4. java 导出excel打开报错_java导出excel文件报“失败-网络错误”

    问题描述 用IP访问单个服务器去下载excel文件正常,访问F5去下载的时候报"失败-网络错误" 项目截图(必填) 运行截图(必填) 相关代码片段 response.reset() ...

  5. java导出excel 打不开_Java使用POI生成Excel文件后打不开的问题

    在实际的工作中,有时会遇到获取数据后需要存入Excel文件的情况.但是,在生成Excel文件后,发现无法正常打开该文件. 例如:以当前的时间点为文件名,新生成一个Excel文件.先来看看下面一段代码. ...

  6. java导出word文档组件_java导出word文档(转)

    导出word文档有两种方式:第一种是使用POI,第二种是使用itext组件,下面逐渐介绍: 1.使用POI的方式:本方式目前没法改变字体样式,只能输出纯文本. /** * 试卷导出word文档 * @ ...

  7. java excel 晒新年操作_JAVA使用POI操作excel

    这里提一下,java操作excel的组件除了apache的poi,还有jexcelapi(jxl),其中poi组件的获取地址为poi.apache.org. poi组件中常用的类有HSSFworkbo ...

  8. java excel row遍历空_Java poi读取,写入Excel,处理row和cell可能为空的情况

    首先需要导入包 import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.NP ...

  9. java excel 导入 加校验_Java 利用POI进行excel文件导入时校验数据,并且追加错误批注...

    首先拿到前端file控件上传的excel文件,到后台接收!拿到excel这就不多说了网上很多demo的,下面直接说校验单元格追加批注信息的 private void setpz(Workbook wo ...

最新文章

  1. 网站功能页面构建有何技巧?
  2. Vue的常用指令(v-html {{}}文本插值,v-bind绑定属性,v-if条件渲染,v-for列表渲染,v-on @ 事件绑定,v-model表单绑定)
  3. [Leedcode][JAVA][第287题][寻找重复数][HashSet][二分查找][快慢指针]
  4. 朗读评价语言集锦_评语大全之朗诵评语艺术表现力
  5. CSS li 一半左浮一半右浮
  6. pytorch torch.randn
  7. 数据可视化(3)--Google Charts
  8. “fatal error C1010”错误解决的三种方法
  9. spark-submit(spark版本2.3.2)
  10. 面试官:ca证书存储在哪的
  11. CATIA怎么约束快捷键_CATIA快捷键设置详解
  12. 被封域名什么原因?如何预防域名被封呢?
  13. Premiere Pro cc 2019 学习笔记
  14. 质量回顾分析系统软件(QRS)
  15. 2021深圳观澜中学高考成绩查询入口,2019深圳龙华中学、观澜中学、龙华高级中学录取分数线及高考成绩喜报...
  16. linux根据端口查找进程,linux根据端口查找进程
  17. vim .bashrc编辑界面
  18. [译] 从原型图到成品:步步深入 CSS 布局
  19. 手柄映射键盘_如何使用运动加加TAP手柄在PC上玩手游
  20. uiuc的计算机工程硕士学费标准,伊利诺伊大学香槟分校学费及生活费一览(附美国学费最贵大学TOP20榜单)...

热门文章

  1. 什么是过拟合(overfitting)
  2. wayland学习一 ——client connect到wayland server
  3. 系统调用(Linux)
  4. 域名解析产品——HTTPDNS使用教程
  5. 用MAC系统写C语言程序
  6. 用bat执行ps1脚本
  7. OpenGL ES之离屏渲染的帧缓冲区对象FBO的说明和使用
  8. 冒泡排序java实现和分析
  9. 大数据分析-考试复习
  10. 【疑难教程】视频上云服务平台EasyCVR使用Go语言可执行程序出现“Process XXX has exited with status XXXX”错误