1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java导出excel合并单元格_Java 导出Excel 合并Excel单元格

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

时间:2019-12-21 02:14:26

相关推荐

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

/**

*导出Excel表格

*

*@paramallList要导出的数据

*@paramheadArrjson键值对

*@paramtitleArrexcel标题

*@paramtitleExcel名字

*@parammergeColumn要合并的列

*/

publicvoidexportExcel(JSONArrayallList,String[]headArr,Stringtitle,String[]titleArr,int[]mergeColumn,HttpServletResponseresponse){

try{

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

response.reset();

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

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

+newString((title+".xls").getBytes("GBK"),

"ISO8859_1")+"\"");

OutputStreamout=response.getOutputStream();

WritableWorkbookworkbook=Workbook.createWorkbook(out);

WritableSheetsheet=workbook.createSheet(title,0);

WritableFontwf=newWritableFont(WritableFont.ARIAL,10,WritableFont.BOLD,false,

UnderlineStyle.NO_UNDERLINE,Colour.BLACK);

WritableCellFormatwcf=newWritableCellFormat(wf);

wcf.setVerticalAlignment(VerticalAlignment.CENTRE);

wcf.setAlignment(Alignment.CENTRE);

//CellViewcellView=newCellView();

for(inti=0;i

Labellabel=newLabel(i,0,titleArr[i],wcf);

sheet.addCell(label);

//CellViewcellView=newCellView();

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

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

}

longs1=System.nanoTime();

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

WritableCellFormatcellFormat=newWritableCellFormat();

cellFormat.setAlignment(Alignment.CENTRE);

cellFormat.setVerticalAlignment(VerticalAlignment.CENTRE);

for(inti=0;i

for(intj=0;j

Labellabel=newLabel(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);

//CellViewcellView=newCellView();

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

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

}

}

//前一行数据

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

//记住第一行数据

for(inti=0;i

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

}

//循环要合并得列

for(inti=0;i

intcount=0;

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

for(intj=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();

longs2=System.nanoTime();

System.out.println("jxlwrite......."+"rowstoexcel:"+(s2-s1));

}catch(RowsExceededExceptione){

e.printStackTrace();

}catch(WriteExceptione){

e.printStackTrace();

}catch(IOExceptione){

e.printStackTrace();

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。