java 导出如何合并列_Java导出excel时合并同一列中相同内容的行思路详解

本文详细介绍了在Java中如何导出Excel时合并同一列中相同内容的行,通过循环处理并比较前后行的房屋类型,实现Excel的列合并。提供了一段具体的实现代码,包括设置标题、处理数据和合并单元格的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、有时候导出Excel时需要按类别导出,一大类下好几个小类,小类下又有好几个小小类,就像下图:

要实现这个也不难,

思路如下:按照大类来循环,如上就是按照张江校区、徐汇校区、临港校区三个大类循环,然后再处理小类,因为本例小小类不涉及合并,所以只涉及处理小类,如果需要处理小小类,还需要在处理一下,具体实现原理同小类;

每次循环时记录下此次循环的房屋类型和上次循环的房屋类型,两者相同时,要合并的结束行++,否者,说明这个房屋类型已经循环完毕(前提是各类型都按顺序order by 了,保证相同类型相邻),开始融合。具体实现如下:

二、实现代码,具体思路已经在注释中了

public void expStatistics(String filePath,String campuscode) {

try {

WritableWorkbook wwb = Workbook.createWorkbook(new File(filePath));

JxlFormatUtil Jfu = new JxlFormatUtil();

WritableSheet ws = wwb.createSheet("房屋报表统计", 0);

String[] tableHead = {"校区名称:20","房屋类型:30","房屋用途:30","使用面积(?):20"};

for (int i = 0; i < tableHead.length; i++) {//每一列的标题样式

ws.addCell(new Label(i, 0, tableHead[i].split(":")[0], JxlFormatUtil.wcHead));

ws.setColumnView(i, Integer.valueOf(tableHead[i].split(":")[1]));

}

int col = 1;//从第1行开始

//以下变量用来融合相同内容 的行

int perCol = col;

String perPurpose = "";//上一个用途类型

String purpose = "";//当前用途类型

int startMergeCol = 1;//要融合的第一行

int endMergeCol = 0;//要融合的最后行

boolean flag = true;//用来记录是否是第一次循环

//根据搜索条件导出

List campusList = new ArrayList();

if(null != campuscode && !"".equals(campuscode)){

campusList = campusdao.findCampusByCode(campuscode);

}else {

campusList =campusdao.findCampus();

}

for (FcxtCampus campus : campusList) {

List builds = builddao.statisticsBuilds(campus.getCampuscode());//获取所有房屋信息

if(null != builds && builds.size() > 0){

for (FcxtBuild build : builds) {

int row = 0;//从第0列开始

ws.addCell(new Label(row++, col, campus.getCampusname(), JxlFormatUtil.wcCenter));

purpose = build.getUsefulpurpose();

if(flag){//如果是第一次循环,将perPurpose初始化,以便后面的第一次判断

perPurpose = purpose;

flag = false;

}

ws.addCell(new Label(row++, col, FcxtBuild.BUILD_USEFULPURPOSE.get(build.getUsefulpurpose()), JxlFormatUtil.wcCenter));

if(purpose.equals(perPurpose)){

endMergeCol++;

}else{//两者不相同时,融合之前相同的行

ws.mergeCells(1, startMergeCol, 1, endMergeCol);

startMergeCol = col;

endMergeCol = startMergeCol;

perPurpose = purpose;

}

ws.addCell(new Label(row++, col, FcxtBuild.BUILD_BUILDINGTYPE.get(build.getBuildingtype()), JxlFormatUtil.wcCenter));

ws.addCell(new Label(row++, col, build.getBuildarea().toString(), JxlFormatUtil.wcCenter));

col++;

}

ws.mergeCells(0, perCol, 0, col-1);

perCol = col;

}

}

wwb.write();

wwb.close();

} catch (Exception e) {

e.printStackTrace();

}

}

总结

以上所述是小编给大家介绍的Java导出excel时合并同一列中相同内容的行思路详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值