ExcelTemplateProc.java如下:packagecom.liu.susu.excel.template.poi.common;importorg.apache.commons.lang3.StringUtils;importorg.apache.poi.ss.usermodel.CellCopyPolicy;importorg.apache.poi.ss.usermodel.Workbook;importorg.apache.poi.xssf.usermodel.XSSFCell;importorg.apache.poi.xssf.usermodel.XSSFRow;importorg.apache.poi.xssf.usermodel.XSSFSheet;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;importorg.springframework.util.ResourceUtils;importjava.io.*;importjava.util.List;importjava.util.Map;publicclassExcelTemplateProc{ publicstaticvoiddoExportExcelByTemplateProc(StringtemplateFileName,StringexportFilePathAndName,Map<String,Object>staticDataMap,List<DynamicDataMapping>dynamicDataMappingList)throwsIOException{ Filefile =ResourceUtils.getFile("classpath:"+templateFileName);InputStreaminputStream =newFileInputStream(file);Workbookworkbook =dealFirstSheetByTemplate(inputStream,staticDataMap,dynamicDataMappingList);saveExportFile(workbook,exportFilePathAndName);}publicstaticvoidsaveExportFile(Workbookworkbook,StringexcelFilePath)throwsIOException{ FileOutputStreamoutputStream =newFileOutputStream(excelFilePath);executeWorkBookWrite(workbook,outputStream);}publicstaticvoidexecuteWorkBookWrite(Workbookworkbook,OutputStreamoutputStream)throwsIOException{ workbook.write(outputStream);outputStream.flush();outputStream.close();workbook.close();}publicstaticWorkbookdealFirstSheetByTemplate(InputStreaminputStream,Map<String,Object>staticDataMap,List<DynamicDataMapping>dynamicDataMappingList)throwsIOException{ XSSFWorkbookworkbook =newXSSFWorkbook(inputStream);XSSFSheetsheet =workbook.getSheetAt(0);dealSheetDataByTemplate(sheet,staticDataMap,dynamicDataMappingList);returnworkbook;}privatestaticvoiddealSheetDataByTemplate(XSSFSheetsheet,Map<String,Object>staticDataMap,List<DynamicDataMapping>dynamicDataMappingList){ for(inti =sheet.getFirstRowNum();i <=sheet.getLastRowNum();i++){ XSSFRowrow =sheet.getRow(i);DynamicDataMappingdynamicDataMapping =getDynamicRowDataByMatch(row,dynamicDataMappingList);if(dynamicDataMapping !=null){ i =getTemplateLastRowIndexAfterDealTemplate(sheet,i,dynamicDataMapping);}else{ dealTemplateDataRow(row,null,staticDataMap);}}}privatestaticvoiddealTemplateDataRow(XSSFRowrow,StringdataPrefix,Map<String,Object>dataMap){ if(dataMap ==null){ return;}for(inti =row.getFirstCellNum();i <row.getLastCellNum();i++){ XSSFCellcell =row.getCell(i);fillInTemplateCellDataValue(cell,dataPrefix,dataMap);}}privatestaticvoidfillInTemplateCellDataValue(XSSFCellcell,StringdataPrefix,Map<String,Object>dataMap){ if(cell ==null){ return;}StringcellValue =cell.getStringCellValue();if(StringUtils.isEmpty(cellValue)){ return;}booleanflag =false;dataPrefix =StringUtils.isEmpty(dataPrefix)?"":(dataPrefix +".");for(Map.Entry<String,Object>entry :dataMap.entrySet()){ StringcellTemplateStr ="{ { "+dataPrefix +entry.getKey()+"}}";if(cellValue.contains(cellTemplateStr)){ cellValue =cellValue.replace(cellTemplateStr,entry.getValue()==null?"":entry.getValue().toString());flag =true;}}if(flag){ cell.setCellValue(cellValue);}}privatestaticDynamicDataMappinggetDynamicRowDataByMatch(XSSFRowrow,List<DynamicDataMapping>dynamicDataMappingList){ if(dynamicDataMappingList ==null||dynamicDataMappingList.size()<1){ returnnull;}for(intj =row.getFirstCellNum();j <row.getLastCellNum();j++){ XSSFCellcell =row.getCell(j);Stringvalue =cell.getStringCellValue();if(value !=null){ for(DynamicDataMappingdynamicData :dynamicDataMappingList){ if(value.startsWith("{ { "+dynamicData.getDataId()+".")){ returndynamicData;}}}}returnnull;}privatestaticintgetTemplateLastRowIndexAfterDealTemplate(XSSFSheetsheet,introwIndex,DynamicDataMappingdynamicDataMapping){ if(dynamicDataMapping ==null){ returnrowIndex;}intdataRows =dynamicDataMapping.getDataList().size();intcopyRows =dataRows -1;if(copyRows >0){ sheet.shiftRows(rowIndex,sheet.getLastRowNum(),copyRows,true,false);CellCopyPolicycellCopyPolicy =makeCellCopyPolicy();inttemplateDataRow =rowIndex +copyRows;for(inti =0;i <copyRows;i++){ sheet.copyRows(templateDataRow,templateDataRow,rowIndex +i,cellCopyPolicy);}}for(intj =rowIndex;j <rowIndex +dataRows;j++){ Map<String,Object>dataMap =dynamicDataMapping.getDataList().get(j -rowIndex);dealTemplateDataRow(sheet.getRow(j),dynamicDataMapping.getDataId(),dataMap);}returnrowIndex +copyRows;}publicstaticCellCopyPolicymakeCellCopyPolicy(){ CellCopyPolicycellCopyPolicy =newCellCopyPolicy();cellCopyPolicy.setCopyCellValue(true);cellCopyPolicy.setCopyCellStyle(true);returncellCopyPolicy;}}