java导出excel时合并同一列中相同内容的行
2018-06-18 00:20:12来源:未知 阅读 ()
一、有时候导出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(); } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash