最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用POI將多個Sheet合并為一個Sheet

 更新時(shí)間:2022年04月22日 10:09:35   作者:Keson?Z  
這篇文章主要為大家詳細(xì)介紹了Java使用POI將多個Sheet合并為一個Sheet,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Java使用POI將多個Sheet合并為一個Sheet的具體代碼,供大家參考,具體內(nèi)容如下

一、情景描述

最近在項(xiàng)目中客戶提到一個新的需求,一開始是在列表查詢時(shí)導(dǎo)出多個Excel表格,后面提到將多個Excel表格進(jìn)行合并,實(shí)現(xiàn)一個sheet顯示多個sheet內(nèi)容,圖示如下:

一開始:

合并后(不同表格空一行隔開):

二、實(shí)現(xiàn)思路

首先,先按照生成五張表的思路來生成創(chuàng)建一個Workbook sourceWorkbook,然后再創(chuàng)建一個Workbook targetWorkbook,創(chuàng)建一個新的Sheet targetSheet工作表,之后將sourceWorkbook中第一個Sheet sheet1中的內(nèi)容復(fù)制到該表中,再將第二個Sheet sheet2中的內(nèi)容復(fù)制到targetSheet中,依次操作,復(fù)制完sourceWorkbook中全部的五張表,即可實(shí)現(xiàn)將多個Sheet合并為一個Sheet的操作。

三、示例代碼

1.POIUtil工具類

package com.cdtye.itps.jjxt.model.util;
import com.cdtye.itps.jjxt.model.excel.CellRangeAddressExcelVo;
import org.apache.poi.ss.usermodel.*;
import org.springframework.util.CollectionUtils;

import java.util.List;

/**
?* @Author Zhongks
?* @Description //TODO POI導(dǎo)出excel工具類
?* @Date 17:16 2021/5/11
?* @Param
?* @return
?**/
public class POIUtil {
? ? /**
? ? ?* @Author Zhongks
? ? ?* @Description //TODO 拷貝sheet(表)
? ? ?* @Date 17:16 2021/5/11
? ? ?* @Param [targetSheet, sourceSheet, targetWork, sourceWork, startRow, cellRangeAddressExcelVoList]
? ? ?* @return void
? ? ?**/
? ? public static void copySheet(Sheet targetSheet, Sheet sourceSheet,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Workbook targetWork, Workbook sourceWork, int startRow,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?List<CellRangeAddressExcelVo> cellRangeAddressExcelVoList) {
? ? ? ? if(targetSheet == null || sourceSheet == null || targetWork == null || sourceWork == null){
? ? ? ? ? ? throw new IllegalArgumentException("調(diào)用PoiUtil.copySheet()方法時(shí),targetSheet、sourceSheet、targetWork、sourceWork都不能為空,故拋出該異常!");
? ? ? ? }

? ? ? ? //設(shè)置單元格默認(rèn)寬度
? ? ? ? targetSheet.setDefaultColumnWidth(25);
? ? ? ? //復(fù)制源表中的行
? ? ? ? for (int i = sourceSheet.getFirstRowNum(); i <= sourceSheet.getLastRowNum(); i++) {
? ? ? ? ? ? Row sourceRow = sourceSheet.getRow(i);
? ? ? ? ? ? Row targetRow = targetSheet.createRow(i+startRow); ?//創(chuàng)建新的row
? ? ? ? ? ? if (sourceRow != null) {
? ? ? ? ? ? ? ? copyRow(targetRow, sourceRow,
? ? ? ? ? ? ? ? ? ? ? ? targetWork, sourceWork);
? ? ? ? ? ? }
? ? ? ? }

? ? ? ? //自定義合并單元格樣式(若不需要進(jìn)行單元格合并操作,將cellRangeAddressExcelVoList賦值為null即可)
? ? ? ? if(!CollectionUtils.isEmpty(cellRangeAddressExcelVoList)){
? ? ? ? ? ? //合并單元格
? ? ? ? ? ? for(CellRangeAddressExcelVo model:cellRangeAddressExcelVoList){
? ? ? ? ? ? ? ? targetSheet.addMergedRegion(new org.apache.poi.ss.util.CellRangeAddress(model.getFirstRow(),model.getLastRow(),model.getFirstCol(),model.getLastCol()));
? ? ? ? ? ? }
? ? ? ? }
? ? }


? ? /**
? ? ?* @Author Zhongks
? ? ?* @Description //TODO 拷貝row(行)
? ? ?* @Date 17:17 2021/5/11
? ? ?* @Param [targetRow, sourceRow, targetWork, sourceWork]
? ? ?* @return void
? ? ?**/
? ? public static void copyRow(Row targetRow, Row sourceRow,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Workbook targetWork, Workbook sourceWork) ?{
? ? ? ? if(targetRow == null || sourceRow == null || targetWork == null || sourceWork == null ){
? ? ? ? ? ? throw new IllegalArgumentException("調(diào)用PoiUtil.copyRow()方法時(shí),targetRow、sourceRow、targetWork、sourceWork、targetPatriarch都不能為空,故拋出該異常!");
? ? ? ? }

? ? ? ? //設(shè)置行高
? ? ? ? targetRow.setHeight(sourceRow.getHeight());

? ? ? ? for (int i = sourceRow.getFirstCellNum(); i < sourceRow.getLastCellNum(); i++) {
? ? ? ? ? ? Cell sourceCell = sourceRow.getCell(i);
? ? ? ? ? ? Cell targetCell = null;

? ? ? ? ? ? if (sourceCell != null && sourceCell.getStringCellValue()!="") {
? ? ? ? ? ? ? ? if (targetCell == null) {
? ? ? ? ? ? ? ? ? ? targetCell = targetRow.createCell(i);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? //拷貝單元格,包括內(nèi)容和樣式
? ? ? ? ? ? ? ? copyCell(targetCell, sourceCell, targetWork, sourceWork);
? ? ? ? ? ? }
? ? ? ? }
? ? }

? ? /**
? ? ?* @Author Zhongks
? ? ?* @Description //TODO 拷貝cell(單元格)
? ? ?* @Date 17:18 2021/5/11
? ? ?* @Param [targetCell, sourceCell, targetWork, sourceWork]
? ? ?* @return void
? ? ?**/
? ? public static void copyCell(Cell targetCell, Cell sourceCell, Workbook targetWork, Workbook sourceWork) {
? ? ? ? if(targetCell == null || sourceCell == null || targetWork == null || sourceWork == null ){
? ? ? ? ? ? throw new IllegalArgumentException("調(diào)用PoiUtil.copyCell()方法時(shí),targetCell、sourceCell、targetWork、sourceWork都不能為空,故拋出該異常!");
? ? ? ? }

? ? ? ? CellStyle targetCellStyle=targetWork.createCellStyle();
? ? ? ? targetCellStyle.cloneStyleFrom(sourceCell.getCellStyle());//拷貝樣式
? ? ? ? //重新添加樣式(這里可以根據(jù)你的需要重新進(jìn)行單元格樣式添加)
? ? ? ? /*targetCellStyle.setBorderTop(BorderStyle.THIN);//設(shè)置上邊框線
? ? ? ? targetCellStyle.setBorderLeft(BorderStyle.THIN);//設(shè)置左邊框線
? ? ? ? targetCellStyle.setBorderBottom(BorderStyle.THIN);//設(shè)置下邊框線
? ? ? ? targetCellStyle.setBorderRight(BorderStyle.THIN);//設(shè)置右邊框線*/
? ? ? ? targetCell.setCellStyle(targetCellStyle);

? ? ? ? targetCell.setCellValue(sourceCell.getStringCellValue());
? ? }

}

2.需要合并的單元格位置信息實(shí)體

package com.cdtye.itps.jjxt.model.excel;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.experimental.Accessors;

/**
?* @ClassName CellRangeAddressExcelVo
?* @Description TODO 需要合并的單元格位置信息Vo
?* @Author Zhongks
?* @Date 2021/5/11 ?14:09
?* @Version 1.0
?**/
@Data
@Accessors(chain = true)
@AllArgsConstructor
public class CellRangeAddressExcelVo {
? ? //起始行號
? ? private int firstRow;
? ? //終止行號
? ? private int lastRow;
? ? //起始列號
? ? private int firstCol;
? ? //終止列號
? ? private int lastCol;

}

該實(shí)體類是為了進(jìn)行合并單元格操作,用來存儲需要合并的單元格位置信息:

Service層代碼:

*
? ? ?* @Author Zhongks
? ? ?* @Description //TODO excel導(dǎo)出
? ? ?* @Date 12:25 2021/5/7
? ? ?* @Param [list, response]
? ? ?* @return void
? ? ?**/
? ? public void export(BureauDayShiftVo bureauDayShiftVo,HttpServletResponse response) {
? ? ? ? try {
? ? ? ? ? ? // 設(shè)置下載的Excel名稱,以當(dāng)前時(shí)間為文件后綴,
? ? ? ? ? ? String dateTime = DateUtil.formatDateString(new Date(), DateUtil.DATE_FORMAT);
? ? ? ? ? ? String fileName = "供電安全質(zhì)量日交班表"+dateTime+".xlsx";
? ? ? ? ? ? // 設(shè)置響應(yīng)輸出的頭類型
? ? ? ? ? ? response.setHeader("content-Type", "application/vnd.ms-excel");
? ? ? ? ? ? response.setHeader("Content-Disposition", "attachment;filename="+fileName);

? ? ? ? ? ? // excel信息部分
? ? ? ? ? ? //供電處重點(diǎn)信息追蹤表信息
? ? ? ? ? ? bureauDayShiftVo.setTrackFlag(1);
? ? ? ? ? ? Map<String, Object> trackSafeQualityMap =this.getTrackSafeQualityMap(bureauDayShiftVo);
? ? ? ? ? ? //日安全質(zhì)量信息表信息
? ? ? ? ? ? bureauDayShiftVo.setTrackFlag(0);
? ? ? ? ? ? Map<String, Object> safeQualityParamsMap =this.getTrackSafeQualityMap(bureauDayShiftVo);
? ? ? ? ? ? //天窗兌現(xiàn)統(tǒng)計(jì)表
? ? ? ? ? ? Map<String, Object> skylightCashStatisticsMap = this.getSkylightCashStatisticsMap();
? ? ? ? ? ? //其他安全質(zhì)量信息表
? ? ? ? ? ? Map<String, Object> otherSafeQualityInfoMap = this.getOtherSafeQualityInfoMap(bureauDayShiftVo);
? ? ? ? ? ? //安全質(zhì)量考核表
? ? ? ? ? ? Map<String, Object> safeQualityAssessmentMap = this.getSafeQualityAssessmentMap();

? ? ? ? ? ? //添加表
? ? ? ? ? ? List<Map<String, Object>> sheetsList = new ArrayList<>();
? ? ? ? ? ? sheetsList.add(trackSafeQualityMap);
? ? ? ? ? ? sheetsList.add(safeQualityParamsMap);
? ? ? ? ? ? sheetsList.add(skylightCashStatisticsMap);
? ? ? ? ? ? sheetsList.add(otherSafeQualityInfoMap);
? ? ? ? ? ? sheetsList.add(safeQualityAssessmentMap);

? ? ? ? ? ? List<Map<String, Object>> sourceSheetsList = new ArrayList<>();

? ? ? ? ? ? //創(chuàng)建excel文件的方法
? ? ? ? ? ? Workbook sourceWorkbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF);
? ? ? ? ? ? Workbook targetWorkbook = ExcelExportUtil.exportExcel(sourceSheetsList, ExcelType.HSSF);
? ? ? ? ? ? Workbook workbook = this.mergeWorkSheet(targetWorkbook, sourceWorkbook);
? ? ? ? ? ? //通過response輸出流直接輸入給客戶端
? ? ? ? ? ? ServletOutputStream outputStream = response.getOutputStream();
? ? ? ? ? ? workbook.write(outputStream);
? ? ? ? ? ? outputStream.flush();
? ? ? ? ? ? outputStream.close();
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }


? ? /**
? ? ?* @Author Zhongks
? ? ?* @Description //TODO 返回重點(diǎn)追蹤以及非重點(diǎn)追蹤excel信息
? ? ?* @Date 9:31 2021/5/8
? ? ?* @Param [bureauDayShiftVo]
? ? ?* @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
? ? ?**/
? ? public Map<String, Object> getTrackSafeQualityMap(BureauDayShiftVo bureauDayShiftVo){
? ? ? ? List<BureauDayShiftExcelVo> exportList = new LinkedList<>();
? ? ? ? List<Map<String, Object>> allTrackSafeQualityList = this.getAllTrackSafeQualityList(bureauDayShiftVo);
? ? ? ? //封裝數(shù)據(jù)
? ? ? ? allTrackSafeQualityList.forEach(map -> {
? ? ? ? ? ? String basicInformation="單位:"+map.get("unitDeptName")+"\n"+
? ? ? ? ? ? ? ? ? ? "線別:"+map.get("lineName")+"\n"+
? ? ? ? ? ? ? ? ? ? "所亭:"+map.get("bdsSubstationName")+"\n"+
? ? ? ? ? ? ? ? ? ? "開關(guān)號:"+map.get("switchNo")+"\n"+
? ? ? ? ? ? ? ? ? ? "故障地點(diǎn):"+map.get("faultPlace")+"\n"+
? ? ? ? ? ? ? ? ? ? "發(fā)生時(shí)間:"+DateUtil.formatDateString(map.get("stopDate"), DateUtil.DATE_FORMAT)+"\n"+
? ? ? ? ? ? ? ? ? ? "停時(shí)(分鐘):"+map.get("stopMinute")+"\n"+
? ? ? ? ? ? ? ? ? ? "天氣:"+map.get("weatherInfo")+"\n"+
? ? ? ? ? ? ? ? ? ? "專業(yè)分類:"+map.get("faultMajorName")+"\n";
? ? ? ? ? ? String segmentAnalysis="單位:"+map.get("unitDeptName")+"\n"+
? ? ? ? ? ? ? ? ? ? "單位:詳見分析報(bào)告"+"\n";
? ? ? ? ? ? String isTrack="";
? ? ? ? ? ? if(bureauDayShiftVo.getTrackFlag()==0){
? ? ? ? ? ? ? ? isTrack="否";
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? isTrack="是";
? ? ? ? ? ? }
? ? ? ? ? ? String review="科室:"+map.get("trackUnitDeptName")+"\n"+
? ? ? ? ? ? ? ? ? ? "問題類別:"+map.get("faultCategoryConfigName")+"\n"+
? ? ? ? ? ? ? ? ? ? "定責(zé)考核:"+map.get("dutyType")+"\n"+
? ? ? ? ? ? ? ? ? ? "審核結(jié)果:"+map.get("switchNo")+"\n"+
? ? ? ? ? ? ? ? ? ? "重點(diǎn)追蹤:"+isTrack+"\n";
? ? ? ? ? ? BureauDayShiftExcelVo bureauDayShiftExcelVo =new BureauDayShiftExcelVo(
? ? ? ? ? ? ? ? ? ? DateUtil.formatDateString(map.get("inputDate"), DateUtil.DATE_FORMAT),
? ? ? ? ? ? ? ? ? ? basicInformation,
? ? ? ? ? ? ? ? ? ? (String)map.get("faultDescription"),
? ? ? ? ? ? ? ? ? ? (String)map.get("reportType"),
? ? ? ? ? ? ? ? ? ? segmentAnalysis,
? ? ? ? ? ? ? ? ? ? review,
? ? ? ? ? ? ? ? ? ? map.get("safeQualityState").toString(),
? ? ? ? ? ? ? ? ? ? String.valueOf(bureauDayShiftVo.getTrackFlag()));
? ? ? ? ? ? exportList.add(bureauDayShiftExcelVo);
? ? ? ? });

? ? ? ? ExportParams exportParams = new ExportParams();
? ? ? ? //設(shè)置邊框樣式
// ? ? ? ?exportParams.setStyle(ExcelStyleType.BORDER.getClazz());
? ? ? ? // 設(shè)置sheet的名稱
? ? ? ? if(bureauDayShiftVo.getTrackFlag()==0){
? ? ? ? ? ? exportParams.setSheetName("日安全質(zhì)量信息");
? ? ? ? }else{
? ? ? ? ? ? exportParams.setSheetName("供電處重點(diǎn)追蹤信息");
? ? ? ? }

? ? ? ? Map<String, Object> map = new HashMap<>();
? ? ? ? // title的參數(shù)為ExportParams類型,目前僅僅在ExportParams中設(shè)置了sheetName
? ? ? ? map.put("title", exportParams);
? ? ? ? // 模版導(dǎo)出對應(yīng)得實(shí)體類型,即包含了List的對象
? ? ? ? map.put("entity", BureauDayShiftExcelVo.class);
? ? ? ? // sheet中要填充得數(shù)據(jù)
? ? ? ? map.put("data", exportList);
? ? ? ? return map;
? ? }


? ? /**
? ? ?* @Author Zhongks
? ? ?* @Description //TODO 返回天窗兌現(xiàn)統(tǒng)計(jì)excel信息
? ? ?* @Date 10:59 2021/5/8
? ? ?* @Param []
? ? ?* @return java.util.Map<java.lang.String,java.lang.Object>
? ? ?**/
? ? public Map<String, Object> getSkylightCashStatisticsMap(){
? ? ? ? List<BureauSkylightCashStatisticsExcelVo> exportList = new LinkedList<>();

? ? ? ? //ToDo 得到天窗兌現(xiàn)統(tǒng)計(jì)列表數(shù)據(jù)并進(jìn)行封裝
? ? ? ? //示例數(shù)據(jù)
? ? ? ? BureauSkylightCashStatisticsCommonExcelVo applicationExcelVo=new BureauSkylightCashStatisticsCommonExcelVo("申請供電類","申請非供電類");
? ? ? ? BureauSkylightCashStatisticsCommonExcelVo applicationTimeExcelVo=new BureauSkylightCashStatisticsCommonExcelVo("申請時(shí)間供電類","申請時(shí)間非供電類");
? ? ? ? BureauSkylightCashStatisticsCommonExcelVo getTimeExcelVo=new BureauSkylightCashStatisticsCommonExcelVo("給點(diǎn)時(shí)間供電類","給點(diǎn)時(shí)間非供電類");
? ? ? ? BureauSkylightCashStatisticsCommonExcelVo workTimeExcelVo=new BureauSkylightCashStatisticsCommonExcelVo(null,null);
? ? ? ? BureauSkylightCashStatisticsExcelVo bureauSkylightCashStatisticsExcelVo =new BureauSkylightCashStatisticsExcelVo("懷化供電段","高鐵","滬昆高速線",
? ? ? ? ? ? ? ? applicationExcelVo,"取消","10","10",applicationTimeExcelVo,getTimeExcelVo,workTimeExcelVo,"天窗取消原因");
? ? ? ? exportList.add(bureauSkylightCashStatisticsExcelVo);
? ? ? ? exportList.add(bureauSkylightCashStatisticsExcelVo);
? ? ? ? exportList.add(bureauSkylightCashStatisticsExcelVo);

? ? ? ? //供電處重點(diǎn)追蹤信息表
? ? ? ? ExportParams exportParams = new ExportParams();
? ? ? ? //設(shè)置邊框樣式
// ? ? ? ?exportParams.setStyle(ExcelStyleType.BORDER.getClazz());
? ? ? ? // 設(shè)置sheet的名稱
? ? ? ? exportParams.setSheetName("天窗兌現(xiàn)統(tǒng)計(jì)");

? ? ? ? Map<String, Object> map = new HashMap<>();
? ? ? ? // title的參數(shù)為ExportParams類型,目前僅僅在ExportParams中設(shè)置了sheetName
? ? ? ? map.put("title", exportParams);
? ? ? ? // 模版導(dǎo)出對應(yīng)得實(shí)體類型,即包含了List的對象
? ? ? ? map.put("entity", BureauSkylightCashStatisticsExcelVo.class);
? ? ? ? // sheet中要填充得數(shù)據(jù)
? ? ? ? map.put("data", exportList);
? ? ? ? return map;
? ? }

? ??
? ? /**
? ? ?* @Author Zhongks
? ? ?* @Description //TODO 返回其他安全信息excel信息
? ? ?* @Date 11:01 2021/5/8
? ? ?* @Param []
? ? ?* @return java.util.Map<java.lang.String,java.lang.Object>
? ? ?**/
? ? public Map<String, Object> getOtherSafeQualityInfoMap(BureauDayShiftVo bureauDayShiftVo){
? ? ? ? List<BureauOtherSafeQualityInfoExcelVo> exportList = new LinkedList<>();
? ? ? ? //ToDo 得到其他安全信息列表數(shù)據(jù)并進(jìn)行封裝
? ? ? ? BureauSafeQualityOtherInfoVo bureauSafeQualityOtherInfoVo=new BureauSafeQualityOtherInfoVo();
? ? ? ? bureauSafeQualityOtherInfoVo.setStartDate(bureauDayShiftVo.getStartDate());
? ? ? ? bureauSafeQualityOtherInfoVo.setEndDate(bureauDayShiftVo.getEndDate());
? ? ? ? List<Map<String, Object>> list = bureauSafeQualityOtherInfoService.findList(bureauSafeQualityOtherInfoVo);
? ? ? ? list.forEach(map->{
? ? ? ? ? ? BureauOtherSafeQualityInfoExcelVo otherSafeQualityInfoExcelVo=new BureauOtherSafeQualityInfoExcelVo(
? ? ? ? ? ? ? ? ? ? DateUtil.formatDateString(map.get("createDatetime"), DateUtil.DATE_FORMAT),
? ? ? ? ? ? ? ? ? ? (String)map.get("description"),
? ? ? ? ? ? ? ? ? ? (String)map.get("inputStaffName"),
? ? ? ? ? ? ? ? ? ? DateUtil.formatDateString(map.get("createDatetime"), DateUtil.DATE_FORMAT),
? ? ? ? ? ? ? ? ? ? (String)map.get("modifyStaffName"),
? ? ? ? ? ? ? ? ? ? DateUtil.formatDateString(map.get("updateDatetime"), DateUtil.DATE_FORMAT)
? ? ? ? ? ? );
? ? ? ? ? ? exportList.add(otherSafeQualityInfoExcelVo);
? ? ? ? });

? ? ? ? //供電處重點(diǎn)追蹤信息表
? ? ? ? ExportParams exportParams = new ExportParams();
? ? ? ? //設(shè)置邊框樣式
// ? ? ? ?exportParams.setStyle(ExcelStyleType.BORDER.getClazz());
? ? ? ? // 設(shè)置sheet的名稱
? ? ? ? exportParams.setSheetName("其他安全信息");

? ? ? ? Map<String, Object> map = new HashMap<>();
? ? ? ? // title的參數(shù)為ExportParams類型,目前僅僅在ExportParams中設(shè)置了sheetName
? ? ? ? map.put("title", exportParams);
? ? ? ? // 模版導(dǎo)出對應(yīng)得實(shí)體類型,即包含了List的對象
? ? ? ? map.put("entity", BureauOtherSafeQualityInfoExcelVo.class);
? ? ? ? // sheet中要填充得數(shù)據(jù)
? ? ? ? map.put("data", exportList);
? ? ? ? return map;
? ? }


? ? /**
? ? ?* @Author Zhongks
? ? ?* @Description //TODO 返回安全質(zhì)量考核excel信息
? ? ?* @Date 11:04 2021/5/8
? ? ?* @Param []
? ? ?* @return java.util.Map<java.lang.String,java.lang.Object>
? ? ?**/
? ? public Map<String, Object> getSafeQualityAssessmentMap(){
? ? ? ? List<BureauSafeQualityAssessmentExcelVo> exportList = new LinkedList<>();

? ? ? ? //ToDo 得到安全質(zhì)量考核列表數(shù)據(jù)并進(jìn)行封裝


? ? ? ? //供電處重點(diǎn)追蹤信息表
? ? ? ? ExportParams exportParams = new ExportParams();
? ? ? ? //設(shè)置邊框樣式
// ? ? ? ?exportParams.setStyle(ExcelStyleType.BORDER.getClazz());
? ? ? ? // 設(shè)置sheet的名稱
? ? ? ? exportParams.setSheetName("安全質(zhì)量考核");

? ? ? ? Map<String, Object> map = new HashMap<>();
? ? ? ? // title的參數(shù)為ExportParams類型,目前僅僅在ExportParams中設(shè)置了sheetName
? ? ? ? map.put("title", exportParams);
? ? ? ? // 模版導(dǎo)出對應(yīng)得實(shí)體類型,即包含了List的對象
? ? ? ? map.put("entity", BureauSafeQualityAssessmentExcelVo.class);
? ? ? ? // sheet中要填充得數(shù)據(jù)
? ? ? ? map.put("data", exportList);
? ? ? ? return map;
? ? }


? ? /**
? ? ?* @Author Zhongks
? ? ?* @Description //TODO 合并sheet
? ? ?* @Date 10:39 2021/5/11
? ? ?* @Param [targetWorkbook, sourceWorkbook]
? ? ?* @return org.apache.poi.ss.usermodel.Workbook
? ? ?**/
? ? public static Workbook mergeWorkSheet(Workbook targetWorkbook, Workbook sourceWorkbook){
? ? ? ? try{
? ? ? ? ? ? //第一個sheet
? ? ? ? ? ? Sheet firstSourceSheet=sourceWorkbook.getSheetAt(0);
? ? ? ? ? ? //獲得第一個sheet總行數(shù)
? ? ? ? ? ? int firstSourceSheetLen=firstSourceSheet.getPhysicalNumberOfRows();
? ? ? ? ? ? //獲取第幾個工作表
? ? ? ? ? ? Sheet secondSourceSheet= sourceWorkbook.getSheetAt(1);
? ? ? ? ? ? int secondSourceSheetLen=secondSourceSheet.getPhysicalNumberOfRows();
? ? ? ? ? ? Sheet thirdSourceSheet=sourceWorkbook.getSheetAt(2);
? ? ? ? ? ? int thirdSourceSheetLen=thirdSourceSheet.getPhysicalNumberOfRows();
? ? ? ? ? ? Sheet fourSourceSheet=sourceWorkbook.getSheetAt(3);
? ? ? ? ? ? int fourSourceSheetLen=fourSourceSheet.getPhysicalNumberOfRows();
? ? ? ? ? ? Sheet fiveSourceSheet=sourceWorkbook.getSheetAt(4);
? ? ? ? ? ? //表合并后新表名稱
? ? ? ? ? ? Sheet targetSheet = targetWorkbook.createSheet("安全質(zhì)量信息日交班表");
? ? ? ? ? ? //表合并(根據(jù)startRow來控制各個表之間的距離,這里為空一行)
? ? ? ? ? ? POIUtil.copySheet(targetSheet, firstSourceSheet, targetWorkbook, sourceWorkbook,0,null);
? ? ? ? ? ? POIUtil.copySheet(targetSheet, secondSourceSheet, targetWorkbook, sourceWorkbook,firstSourceSheetLen+1,null);
? ? ? ? ? ? int thirdSourceSheetColLen=thirdSourceSheet.getRow(0).getPhysicalNumberOfCells();
? ? ? ? ? ? //得到需要合并單元格的坐標(biāo)列表,row與col都從0開始計(jì)算
? ? ? ? ? ? List<CellRangeAddressExcelVo> cellRangeAddressExcelVoList = getCellRangeAddressExcelVoList(firstSourceSheetLen+secondSourceSheetLen+2, thirdSourceSheetColLen);
? ? ? ? ? ? //第三張表需要進(jìn)行合并單元格操作
? ? ? ? ? ? POIUtil.copySheet(targetSheet, thirdSourceSheet, targetWorkbook, sourceWorkbook,firstSourceSheetLen+secondSourceSheetLen+2,cellRangeAddressExcelVoList);
? ? ? ? ? ? POIUtil.copySheet(targetSheet, fourSourceSheet, targetWorkbook, sourceWorkbook,firstSourceSheetLen+secondSourceSheetLen+thirdSourceSheetLen+3,null);
? ? ? ? ? ? POIUtil.copySheet(targetSheet, fiveSourceSheet, targetWorkbook, sourceWorkbook,firstSourceSheetLen+secondSourceSheetLen+thirdSourceSheetLen+fourSourceSheetLen+4,null);
? ? ? ? ? ? return targetWorkbook;
? ? ? ? }catch (Exception e){
? ? ? ? ? ? log.error("Workbook合并出錯",e);
? ? ? ? ? ? return null;
? ? ? ? }
? ? }

? ? /**
? ? ?* @Author Zhongks
? ? ?* @Description //TODO 根據(jù)表格場景自定義需要返回合并的單元格位置坐標(biāo)(注意:row與col都從0開始計(jì)算)
? ? ?* @Date 14:23 2021/5/11
? ? ?* @Param [row, col]
? ? ?* @return java.util.List<com.cdtye.itps.jjxt.model.excel.CellRangeAddressExcelVo>
? ? ?**/
? ? public static List<CellRangeAddressExcelVo> getCellRangeAddressExcelVoList(int row,int col){
? ? ? ? //合并單元格坐標(biāo)位置
? ? ? ? List<CellRangeAddressExcelVo> list=new LinkedList<>();
? ? ? ? for(int i=0;i<15;i++){
? ? ? ? ? ? if(i<7){
? ? ? ? ? ? ? ? CellRangeAddressExcelVo cellRangeAddressExcelVo=new CellRangeAddressExcelVo(row,row+1,i,i);
? ? ? ? ? ? ? ? list.add(cellRangeAddressExcelVo);
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? CellRangeAddressExcelVo cellRangeAddressExcelVo=new CellRangeAddressExcelVo(row,row,i,i+1);
? ? ? ? ? ? ? ? list.add(cellRangeAddressExcelVo);
? ? ? ? ? ? ? ? i++;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return list;
? ? }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot如何統(tǒng)一清理數(shù)據(jù)

    SpringBoot如何統(tǒng)一清理數(shù)據(jù)

    這篇文章主要介紹了SpringBoot如何統(tǒng)一清理數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 一文詳解Java的餓漢和懶漢設(shè)計(jì)模式

    一文詳解Java的餓漢和懶漢設(shè)計(jì)模式

    這篇文章主要為大家詳細(xì)介紹了Java設(shè)計(jì)模式中的的餓漢模式和懶漢模式,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下
    2022-12-12
  • Java 設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解建造者模式

    Java 設(shè)計(jì)模式以虹貓藍(lán)兔的故事講解建造者模式

    建造者模式,是一種對象構(gòu)建模式 它可以將復(fù)雜對象的建造過程抽象出來,使這個抽象過程的不同實(shí)現(xiàn)方法可以構(gòu)造出不同表現(xiàn)的對象。本文將通過示例講解建造者模式,需要的可以參考一下
    2022-04-04
  • java.lang.NullPointerException 如何處理空指針異常的實(shí)現(xiàn)

    java.lang.NullPointerException 如何處理空指針異常的實(shí)現(xiàn)

    這篇文章主要介紹了java.lang.NullPointerException 如何處理空指針異常的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • JAVA(SpringBoot)集成Jasypt進(jìn)行加密、解密功能

    JAVA(SpringBoot)集成Jasypt進(jìn)行加密、解密功能

    Jasypt是一個Java庫,專門用于簡化加密和解密操作,提供多種加密算法支持,集成到SpringBoot等框架中,通過使用Jasypt,可以有效保護(hù)配置文件中的敏感信息,如數(shù)據(jù)庫密碼等,避免被未授權(quán)訪問,Jasypt還支持自定義加密器,提高擴(kuò)展性和安全性,適用于各種需要加密保護(hù)應(yīng)用場景
    2024-09-09
  • Spring Boot+Drools規(guī)則引擎整合詳解

    Spring Boot+Drools規(guī)則引擎整合詳解

    本篇文章主要介紹了Spring Boot+Drools規(guī)則引擎整合,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • JavaSwing坦克大戰(zhàn)游戲的設(shè)計(jì)和實(shí)現(xiàn)

    JavaSwing坦克大戰(zhàn)游戲的設(shè)計(jì)和實(shí)現(xiàn)

    JavaSwing坦克大戰(zhàn)游戲的設(shè)計(jì)要有圖形用戶界面,界面能夠反映游戲所有的細(xì)節(jié),在最終呈現(xiàn)的游戲中也要滿足所有需求,感興趣的小伙伴一起來看看吧
    2021-08-08
  • 使用svn管理Maven項(xiàng)目的方法步驟

    使用svn管理Maven項(xiàng)目的方法步驟

    這篇文章主要介紹了使用svn管理Maven項(xiàng)目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • maven 打包時(shí)間戳問題

    maven 打包時(shí)間戳問題

    這篇文章主要介紹了maven 打包時(shí)間戳問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Spring中的BeanDefinition注冊流程詳解

    Spring中的BeanDefinition注冊流程詳解

    這篇文章主要介紹了Spring中的BeanDefinition注冊流程詳解,  NamespaceHandler簡單來說就是命名空間處理器,Spring為了開放性提供了NamespaceHandler機(jī)制,這樣我們就可以根據(jù)需求自己來處理我們設(shè)置的標(biāo)簽元素,需要的朋友可以參考下
    2023-12-12

最新評論

讷河市| 雷州市| 宁南县| 丰顺县| 密云县| 含山县| 车致| 广宗县| 平利县| 梁平县| 沈丘县| 东源县| 含山县| 崇左市| 中超| 环江| 武城县| 绥德县| 蓬溪县| 徐水县| 青阳县| 新蔡县| 田东县| 阿尔山市| 英吉沙县| 来凤县| 梁河县| 花垣县| 四子王旗| 镇远县| 鹿邑县| 托里县| 焉耆| 铁力市| 阿巴嘎旗| 祁连县| 墨脱县| 新蔡县| 双鸭山市| 南康市| 疏附县|