| 
				
				
				
				 | 
			
			 | 
			@@ -1,159 +1,183 @@ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			package cn.afterturn.easypoi.excel.export; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import java.lang.reflect.Field; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import java.util.ArrayList; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import java.util.Arrays; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import java.util.Collection; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import java.util.Iterator; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import java.util.List; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.poi.ss.usermodel.Drawing; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.poi.ss.usermodel.Sheet; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.poi.ss.usermodel.Workbook; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.poi.xssf.streaming.SXSSFWorkbook; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import cn.afterturn.easypoi.excel.annotation.ExcelTarget; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import cn.afterturn.easypoi.excel.entity.ExportParams; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import cn.afterturn.easypoi.exception.excel.ExcelExportException; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import cn.afterturn.easypoi.exception.excel.enums.ExcelExportEnum; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import cn.afterturn.easypoi.util.PoiExcelGraphDataUtil; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import cn.afterturn.easypoi.util.PoiPublicUtil; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			/** | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * 提供批次插入服务 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * @author JueYue | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * 2016年8月29日 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			public class ExcelBatchExportService extends ExcelExportService { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    private static ThreadLocal<ExcelBatchExportService> THREAD_LOCAL = new ThreadLocal<ExcelBatchExportService>(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    private Workbook                                   workbook; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    private Sheet                                      sheet; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    private List<ExcelExportEntity>                    excelParams; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    private ExportParams                               entity; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    private int                                        titleHeight; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    private Drawing                                    patriarch; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    private short                                      rowHeight; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    private int                                        index; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    public void init(ExportParams entity, Class<?> pojoClass) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        LOGGER.debug("ExcelBatchExportServer only support SXSSFWorkbook"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        entity.setType(ExcelType.XSSF); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        workbook = new SXSSFWorkbook(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        this.entity = entity; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        super.type = entity.getType(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        createSheet(workbook, entity, pojoClass); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (entity.getMaxNum() == 0) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            entity.setMaxNum(1000000); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        insertDataToSheet(workbook, entity, excelParams, null, sheet); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    public void createSheet(Workbook workbook, ExportParams entity, Class<?> pojoClass) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (LOGGER.isDebugEnabled()) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            LOGGER.debug("Excel export start ,class is {}", pojoClass); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            LOGGER.debug("Excel version is {}", | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                entity.getType().equals(ExcelType.HSSF) ? "03" : "07"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (workbook == null || entity == null || pojoClass == null) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            throw new ExcelExportException(ExcelExportEnum.PARAMETER_ERROR); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        try { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            excelParams = new ArrayList<ExcelExportEntity>(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (entity.isAddIndex()) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                excelParams.add(indexExcelEntity(entity)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            // 得到所有字段 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            Field[] fileds = PoiPublicUtil.getClassFields(pojoClass); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            String targetId = etarget == null ? null : etarget.value(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            getAllExcelField(entity.getExclusions(), targetId, fileds, excelParams, pojoClass, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                null, null); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            sortAllParams(excelParams); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            try { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                sheet = workbook.createSheet(entity.getSheetName()); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } catch (Exception e) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                // 重复遍历,出现了重名现象,创建非指定的名称Sheet | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                sheet = workbook.createSheet(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } catch (Exception e) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    public Workbook appendData(Collection<?> dataSet) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (sheet.getLastRowNum() + dataSet.size() > entity.getMaxNum()) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            sheet = workbook.createSheet(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            index = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			         | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        Iterator<?> its = dataSet.iterator(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        while (its.hasNext()) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            Object t = its.next(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            try { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                index += createCells(patriarch, index, t, excelParams, sheet, workbook, rowHeight); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } catch (Exception e) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                LOGGER.error(e.getMessage(), e); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return workbook; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    @Override | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    protected void insertDataToSheet(Workbook workbook, ExportParams entity, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                     List<ExcelExportEntity> entityList, Collection<?> dataSet, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                     Sheet sheet) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        try { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            dataHandler = entity.getDataHandler(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (dataHandler != null && dataHandler.getNeedHandlerFields() != null) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                needHandlerList = Arrays.asList(dataHandler.getNeedHandlerFields()); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            // 创建表格样式 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            setExcelExportStyler((IExcelExportStyler) entity.getStyle() | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                .getConstructor(Workbook.class).newInstance(workbook)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            patriarch = PoiExcelGraphDataUtil.getDrawingPatriarch(sheet); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (entity.isAddIndex()) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                excelParams.add(indexExcelEntity(entity)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            excelParams.addAll(entityList); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            sortAllParams(excelParams); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            this.index = entity.isCreateHeadRows() | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                ? createHeaderAndTitle(entity, sheet, workbook, excelParams) : 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            titleHeight = index; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            setCellWith(excelParams, sheet); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            rowHeight = getRowHeight(excelParams); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            setCurrentIndex(1); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } catch (Exception e) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            LOGGER.error(e.getMessage(), e); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e.getCause()); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    public static ExcelBatchExportService getExcelBatchExportService(ExportParams entity, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                                     Class<?> pojoClass) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (THREAD_LOCAL.get() == null) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            ExcelBatchExportService batchServer = new ExcelBatchExportService(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            batchServer.init(entity, pojoClass); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            THREAD_LOCAL.set(batchServer); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return THREAD_LOCAL.get(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    public void closeExportBigExcel() { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (entity.getFreezeCol() != 0) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            sheet.createFreezePane(entity.getFreezeCol(), 0, entity.getFreezeCol(), 0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        mergeCells(sheet, excelParams, titleHeight); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        // 创建合计信息 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        addStatisticsRow(getExcelExportStyler().getStyles(true, null), sheet); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        THREAD_LOCAL.remove(); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			package cn.afterturn.easypoi.excel.export;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import cn.afterturn.easypoi.excel.entity.ExportParams;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import cn.afterturn.easypoi.exception.excel.ExcelExportException;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import cn.afterturn.easypoi.exception.excel.enums.ExcelExportEnum;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import cn.afterturn.easypoi.util.PoiExcelGraphDataUtil;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import cn.afterturn.easypoi.util.PoiPublicUtil;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.poi.ss.usermodel.Drawing;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.poi.ss.usermodel.Sheet;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.poi.ss.usermodel.Workbook;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import java.lang.reflect.Field;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import java.util.*;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			/**
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * 提供批次插入服务
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * @author JueYue
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 * 2016年8月29日
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			 */
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			public class ExcelBatchExportService extends ExcelExportService {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    private static ThreadLocal<ExcelBatchExportService> THREAD_LOCAL = new ThreadLocal<ExcelBatchExportService>();
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    private Workbook                                   workbook;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    private Sheet                                      sheet;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    private List<ExcelExportEntity>                    excelParams;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    private ExportParams                               entity;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    private int                                        titleHeight;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    private Drawing                                    patriarch;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    private short                                      rowHeight;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    private int                                        index;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    public void init(ExportParams entity, Class<?> pojoClass) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        List<ExcelExportEntity> excelParams = createExcelExportEntityList(entity, pojoClass);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        init(entity, excelParams);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    public void init(ExportParams entity, List<ExcelExportEntity> excelParams) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        LOGGER.debug("ExcelBatchExportServer only support SXSSFWorkbook");
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        entity.setType(ExcelType.XSSF);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        workbook = new SXSSFWorkbook();
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        this.entity = entity;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        this.excelParams = excelParams;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        super.type = entity.getType();
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        createSheet(workbook, entity, excelParams);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (entity.getMaxNum() == 0) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            entity.setMaxNum(1000000);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        insertDataToSheet(workbook, entity, excelParams, null, sheet);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    public List<ExcelExportEntity> createExcelExportEntityList(ExportParams entity, Class<?> pojoClass) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        try {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>();
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (entity.isAddIndex()) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                excelParams.add(indexExcelEntity(entity));
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            // 得到所有字段
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            Field[] fileds = PoiPublicUtil.getClassFields(pojoClass);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            String targetId = etarget == null ? null : etarget.value();
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            getAllExcelField(entity.getExclusions(), targetId, fileds, excelParams, pojoClass,
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                null, null);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            sortAllParams(excelParams);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return excelParams;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } catch (Exception e) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    public void createSheet(Workbook workbook, ExportParams entity, List<ExcelExportEntity> excelParams) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (LOGGER.isDebugEnabled()) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            LOGGER.debug("Excel export start ,List<ExcelExportEntity> is {}", excelParams);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            LOGGER.debug("Excel version is {}",
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                entity.getType().equals(ExcelType.HSSF) ? "03" : "07");
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (workbook == null || entity == null || excelParams == null) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            throw new ExcelExportException(ExcelExportEnum.PARAMETER_ERROR);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        try {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            try {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                sheet = workbook.createSheet(entity.getSheetName());
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } catch (Exception e) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                // 重复遍历,出现了重名现象,创建非指定的名称Sheet
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                sheet = workbook.createSheet();
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } catch (Exception e) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    public Workbook appendData(Collection<?> dataSet) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (sheet.getLastRowNum() + dataSet.size() > entity.getMaxNum()) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            sheet = workbook.createSheet();
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            index = 0;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        Iterator<?> its = dataSet.iterator();
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        while (its.hasNext()) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            Object t = its.next();
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            try {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                index += createCells(patriarch, index, t, excelParams, sheet, workbook, rowHeight);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } catch (Exception e) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                LOGGER.error(e.getMessage(), e);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return workbook;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    @Override
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    protected void insertDataToSheet(Workbook workbook, ExportParams entity,
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                     List<ExcelExportEntity> entityList, Collection<?> dataSet,
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                     Sheet sheet) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        try {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            dataHandler = entity.getDataHandler();
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (dataHandler != null && dataHandler.getNeedHandlerFields() != null) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                needHandlerList = Arrays.asList(dataHandler.getNeedHandlerFields());
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            // 创建表格样式
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            setExcelExportStyler((IExcelExportStyler) entity.getStyle()
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                .getConstructor(Workbook.class).newInstance(workbook));
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            patriarch = PoiExcelGraphDataUtil.getDrawingPatriarch(sheet);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>();
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (entity.isAddIndex()) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                excelParams.add(indexExcelEntity(entity));
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            excelParams.addAll(entityList);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            sortAllParams(excelParams);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            this.index = entity.isCreateHeadRows()
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                ? createHeaderAndTitle(entity, sheet, workbook, excelParams) : 0;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            titleHeight = index;
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            setCellWith(excelParams, sheet);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            rowHeight = getRowHeight(excelParams);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            setCurrentIndex(1);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } catch (Exception e) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            LOGGER.error(e.getMessage(), e);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e.getCause());
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    public static ExcelBatchExportService getExcelBatchExportService(ExportParams entity,
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                                     Class<?> pojoClass) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (THREAD_LOCAL.get() == null) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            ExcelBatchExportService batchServer = new ExcelBatchExportService();
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            batchServer.init(entity, pojoClass);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            THREAD_LOCAL.set(batchServer);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return THREAD_LOCAL.get();
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    public static ExcelBatchExportService getExcelBatchExportService(ExportParams entity,
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                                     List<ExcelExportEntity> excelParams) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (THREAD_LOCAL.get() == null) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            ExcelBatchExportService batchServer = new ExcelBatchExportService();
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            batchServer.init(entity, excelParams);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            THREAD_LOCAL.set(batchServer);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return THREAD_LOCAL.get();
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    public static ExcelBatchExportService getCurrentExcelBatchExportService() {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return THREAD_LOCAL.get();
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    public void closeExportBigExcel() {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (entity.getFreezeCol() != 0) {
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            sheet.createFreezePane(entity.getFreezeCol(), 0, entity.getFreezeCol(), 0);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        mergeCells(sheet, excelParams, titleHeight);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        // 创建合计信息
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        addStatisticsRow(getExcelExportStyler().getStyles(true, null), sheet);
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        THREAD_LOCAL.remove();
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    }
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			}
 |