Java导出excel时合并同一列中相同内容的行思路详解
程序员文章站
2023-12-17 16:47:04
一、有时候导出excel时需要按类别导出,一大类下好几个小类,小类下又有好几个小小类,就像下图:
要实现这个也不难,
思路如下:按照大类来循环,如上就是按照张江校区...
一、有时候导出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<fcxtcampus> campuslist = new arraylist<fcxtcampus>(); if(null != campuscode && !"".equals(campuscode)){ campuslist = campusdao.findcampusbycode(campuscode); }else { campuslist =campusdao.findcampus(); } for (fcxtcampus campus : campuslist) { list<fcxtbuild> 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时合并同一列中相同内容的行思路详解,希望对大家有所帮助