Java導(dǎo)出excel時合并同一列中相同內(nèi)容的行思路詳解
一、有時候?qū)С鯡xcel時需要按類別導(dǎo)出,一大類下好幾個小類,小類下又有好幾個小小類,就像下圖:

要實現(xiàn)這個也不難,
思路如下:按照大類來循環(huán),如上就是按照張江校區(qū)、徐匯校區(qū)、臨港校區(qū)三個大類循環(huán),然后再處理小類,因為本例小小類不涉及合并,所以只涉及處理小類,如果需要處理小小類,還需要在處理一下,具體實現(xiàn)原理同小類;
每次循環(huán)時記錄下此次循環(huán)的房屋類型和上次循環(huán)的房屋類型,兩者相同時,要合并的結(jié)束行++,否者,說明這個房屋類型已經(jīng)循環(huán)完畢(前提是各類型都按順序order by 了,保證相同類型相鄰),開始融合。具體實現(xiàn)如下:
二、實現(xiàn)代碼,具體思路已經(jīng)在注釋中了
public void expStatistics(String filePath,String campuscode) {
try {
WritableWorkbook wwb = Workbook.createWorkbook(new File(filePath));
JxlFormatUtil Jfu = new JxlFormatUtil();
WritableSheet ws = wwb.createSheet("房屋報表統(tǒng)計", 0);
String[] tableHead = {"校區(qū)名稱:20","房屋類型:30","房屋用途:30","使用面積(㎡):20"};
for (int i = 0; i < tableHead.length; i++) {//每一列的標(biāo)題樣式
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行開始
//以下變量用來融合相同內(nèi)容 的行
int perCol = col;
String perPurpose = "";//上一個用途類型
String purpose = "";//當(dāng)前用途類型
int startMergeCol = 1;//要融合的第一行
int endMergeCol = 0;//要融合的最后行
boolean flag = true;//用來記錄是否是第一次循環(huán)
//根據(jù)搜索條件導(dǎo)出
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){//如果是第一次循環(huán),將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();
}
}
總結(jié)
以上所述是小編給大家介紹的Java導(dǎo)出excel時合并同一列中相同內(nèi)容的行思路詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
win10下定時運(yùn)行與開機(jī)自啟動jar包的方法記錄
這篇文章主要給大家介紹了關(guān)于win10下定時運(yùn)行與開機(jī)自啟動jar包的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
java在linux本地執(zhí)行shell命令的實現(xiàn)方法
本文主要介紹了java在linux本地執(zhí)行shell命令的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
Spring系列中的beanFactory與ApplicationContext
這篇文章主要介紹了Spring系列中的beanFactory與ApplicationContext,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09
Java報錯org.hibernate.TypeMismatchException的解決方法
在Java開發(fā)領(lǐng)域,尤其是涉及到數(shù)據(jù)持久化的項目中,Hibernate是一款廣泛使用的強(qiáng)大工具,然而,可能會在使用過程中遭遇各種報錯,其中org.hibernate.TypeMismatchException就是一個讓人頭疼的問題,下面我們一起深入剖析這個報錯信息2024-11-11
SpringBoot排除不需要的自動配置類DataSourceAutoConfiguration問題
這篇文章主要介紹了SpringBoot排除不需要的自動配置類DataSourceAutoConfiguration問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
Java多線程提交按照時間順序獲取線程結(jié)果詳解流程
在工作中是否存在這樣的場景,多個線程提交執(zhí)行,你不想全部線程執(zhí)行結(jié)束了獲取結(jié)果,而是有線程完成返回結(jié)果就獲取消費(fèi)。本文提供該場景的工具類,可以直接用哦2021-11-11

