| @@ -1 +1 @@ | |||||
| cmd /k mvn clean deploy -DskipTest | |||||
| cmd /k mvn clean deploy -D skipTest | |||||
| @@ -6,8 +6,9 @@ | |||||
| <attribute name="maven.pomderived" value="true"/> | <attribute name="maven.pomderived" value="true"/> | ||||
| </attributes> | </attributes> | ||||
| </classpathentry> | </classpathentry> | ||||
| <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> | |||||
| <classpathentry kind="src" output="target/test-classes" path="src/test/java"> | |||||
| <attributes> | <attributes> | ||||
| <attribute name="optional" value="true"/> | |||||
| <attribute name="maven.pomderived" value="true"/> | <attribute name="maven.pomderived" value="true"/> | ||||
| </attributes> | </attributes> | ||||
| </classpathentry> | </classpathentry> | ||||
| @@ -16,9 +17,8 @@ | |||||
| <attribute name="maven.pomderived" value="true"/> | <attribute name="maven.pomderived" value="true"/> | ||||
| </attributes> | </attributes> | ||||
| </classpathentry> | </classpathentry> | ||||
| <classpathentry kind="src" output="target/test-classes" path="src/test/java"> | |||||
| <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> | |||||
| <attributes> | <attributes> | ||||
| <attribute name="optional" value="true"/> | |||||
| <attribute name="maven.pomderived" value="true"/> | <attribute name="maven.pomderived" value="true"/> | ||||
| </attributes> | </attributes> | ||||
| </classpathentry> | </classpathentry> | ||||
| @@ -4,7 +4,7 @@ | |||||
| <parent> | <parent> | ||||
| <groupId>org.jeecgframework</groupId> | <groupId>org.jeecgframework</groupId> | ||||
| <artifactId>easypoi</artifactId> | <artifactId>easypoi</artifactId> | ||||
| <version>2.0.2</version> | |||||
| <version>2.0.6-SNAPSHOT</version> | |||||
| </parent> | </parent> | ||||
| <artifactId>easypoi-base</artifactId> | <artifactId>easypoi-base</artifactId> | ||||
| <dependencies> | <dependencies> | ||||
| @@ -8,6 +8,7 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook; | |||||
| import org.apache.poi.ss.usermodel.*; | import org.apache.poi.ss.usermodel.*; | ||||
| import org.jeecgframework.poi.excel.entity.ExportParams; | import org.jeecgframework.poi.excel.entity.ExportParams; | ||||
| import org.jeecgframework.poi.excel.entity.TemplateExportParams; | import org.jeecgframework.poi.excel.entity.TemplateExportParams; | ||||
| import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; | |||||
| import org.jeecgframework.poi.excel.export.ExcelExportServer; | import org.jeecgframework.poi.excel.export.ExcelExportServer; | ||||
| import org.jeecgframework.poi.excel.export.template.ExcelExportOfTemplateUtil; | import org.jeecgframework.poi.excel.export.template.ExcelExportOfTemplateUtil; | ||||
| @@ -54,6 +55,20 @@ public final class ExcelExportUtil { | |||||
| new ExcelExportServer().createSheet(workbook, entity, pojoClass, dataSet); | new ExcelExportServer().createSheet(workbook, entity, pojoClass, dataSet); | ||||
| return workbook; | return workbook; | ||||
| } | } | ||||
| /** | |||||
| * @param entity | |||||
| * 表格标题属性 | |||||
| * @param pojoClass | |||||
| * Excel对象Class | |||||
| * @param dataSet | |||||
| * Excel对象数据List | |||||
| */ | |||||
| public static HSSFWorkbook exportExcel(ExportParams entity, | |||||
| List<ExcelExportEntity> entityList, Collection<? extends Map<?,?>> dataSet) { | |||||
| HSSFWorkbook workbook = new HSSFWorkbook(); | |||||
| new ExcelExportServer().createSheetForMap(workbook, entity, entityList, dataSet); | |||||
| return workbook; | |||||
| } | |||||
| /** | /** | ||||
| * 导出文件通过模板解析 | * 导出文件通过模板解析 | ||||
| @@ -49,6 +49,10 @@ public class ExportParams extends ExcelBaseParams { | |||||
| * 过滤的属性 | * 过滤的属性 | ||||
| */ | */ | ||||
| private String[] exclusions; | private String[] exclusions; | ||||
| /** | |||||
| * 是否添加需要需要 | |||||
| */ | |||||
| private boolean addIndex; | |||||
| /** | /** | ||||
| * 表头颜色 | * 表头颜色 | ||||
| */ | */ | ||||
| @@ -122,4 +126,12 @@ public class ExportParams extends ExcelBaseParams { | |||||
| public void setSecondTitleHeight(short secondTitleHeight) { | public void setSecondTitleHeight(short secondTitleHeight) { | ||||
| this.secondTitleHeight = secondTitleHeight; | this.secondTitleHeight = secondTitleHeight; | ||||
| } | } | ||||
| public boolean isAddIndex() { | |||||
| return addIndex; | |||||
| } | |||||
| public void setAddIndex(boolean addIndex) { | |||||
| this.addIndex = addIndex; | |||||
| } | |||||
| } | } | ||||
| @@ -11,11 +11,11 @@ public class ExcelBaseEntity { | |||||
| /** | /** | ||||
| * 对应name | * 对应name | ||||
| */ | */ | ||||
| private String name; | |||||
| protected String name; | |||||
| /** | /** | ||||
| * 对应type | * 对应type | ||||
| */ | */ | ||||
| private int type; | |||||
| private int type = 1; | |||||
| /** | /** | ||||
| * 数据库格式 | * 数据库格式 | ||||
| */ | */ | ||||
| @@ -10,16 +10,41 @@ import java.util.List; | |||||
| */ | */ | ||||
| public class ExcelExportEntity extends ExcelBaseEntity { | public class ExcelExportEntity extends ExcelBaseEntity { | ||||
| private int width; | |||||
| private int height; | |||||
| public ExcelExportEntity() { | |||||
| } | |||||
| public ExcelExportEntity(String name) { | |||||
| super.name = name; | |||||
| } | |||||
| public ExcelExportEntity(String name, Object key) { | |||||
| super.name = name; | |||||
| this.key = key; | |||||
| } | |||||
| public ExcelExportEntity(String name, Object key, int width) { | |||||
| super.name = name; | |||||
| this.width = width; | |||||
| this.key = key; | |||||
| } | |||||
| /** | |||||
| * 如果是MAP导出,这个是map的key | |||||
| */ | |||||
| private Object key; | |||||
| private int width = 10; | |||||
| private int height = 10; | |||||
| /** | /** | ||||
| * 图片的类型,1是文件,2是数据库 | * 图片的类型,1是文件,2是数据库 | ||||
| */ | */ | ||||
| private int exportImageType; | |||||
| private int exportImageType = 0; | |||||
| /** | /** | ||||
| * 排序顺序 | * 排序顺序 | ||||
| */ | */ | ||||
| private int orderNum; | |||||
| private int orderNum = 0; | |||||
| /** | /** | ||||
| * 是否支持换行 | * 是否支持换行 | ||||
| */ | */ | ||||
| @@ -123,4 +148,12 @@ public class ExcelExportEntity extends ExcelBaseEntity { | |||||
| this.mergeVertical = mergeVertical; | this.mergeVertical = mergeVertical; | ||||
| } | } | ||||
| public Object getKey() { | |||||
| return key; | |||||
| } | |||||
| public void setKey(Object key) { | |||||
| this.key = key; | |||||
| } | |||||
| } | } | ||||
| @@ -11,5 +11,7 @@ public interface PoiBaseConstants { | |||||
| public static String SET = "set"; | public static String SET = "set"; | ||||
| public static String IS = "is"; | public static String IS = "is"; | ||||
| public static String IS_ADD_INDEX = "isAddIndex"; | |||||
| } | } | ||||
| @@ -22,6 +22,7 @@ import org.apache.poi.ss.util.CellRangeAddress; | |||||
| import org.jeecgframework.poi.excel.annotation.ExcelTarget; | import org.jeecgframework.poi.excel.annotation.ExcelTarget; | ||||
| import org.jeecgframework.poi.excel.entity.ExportParams; | import org.jeecgframework.poi.excel.entity.ExportParams; | ||||
| import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; | import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; | ||||
| import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants; | |||||
| import org.jeecgframework.poi.excel.export.base.ExcelExportBase; | import org.jeecgframework.poi.excel.export.base.ExcelExportBase; | ||||
| import org.jeecgframework.poi.exception.excel.ExcelExportException; | import org.jeecgframework.poi.exception.excel.ExcelExportException; | ||||
| import org.jeecgframework.poi.exception.excel.enums.ExcelExportEnum; | import org.jeecgframework.poi.exception.excel.enums.ExcelExportEnum; | ||||
| @@ -36,8 +37,9 @@ import org.slf4j.LoggerFactory; | |||||
| * @date 2014年6月17日 下午5:30:54 | * @date 2014年6月17日 下午5:30:54 | ||||
| */ | */ | ||||
| public class ExcelExportServer extends ExcelExportBase { | public class ExcelExportServer extends ExcelExportBase { | ||||
| private final static Logger logger = LoggerFactory.getLogger(ExcelExportServer.class); | |||||
| private final static Logger logger = LoggerFactory | |||||
| .getLogger(ExcelExportServer.class); | |||||
| private static final short cellFormat = HSSFDataFormat | private static final short cellFormat = HSSFDataFormat | ||||
| .getBuiltinFormat("TEXT"); | .getBuiltinFormat("TEXT"); | ||||
| @@ -47,8 +49,8 @@ public class ExcelExportServer extends ExcelExportBase { | |||||
| public void createSheet(HSSFWorkbook workbook, ExportParams entity, | public void createSheet(HSSFWorkbook workbook, ExportParams entity, | ||||
| Class<?> pojoClass, Collection<?> dataSet) { | Class<?> pojoClass, Collection<?> dataSet) { | ||||
| if(logger.isDebugEnabled()){ | |||||
| logger.debug("Excel export start ,class is {}",pojoClass); | |||||
| if (logger.isDebugEnabled()) { | |||||
| logger.debug("Excel export start ,class is {}", pojoClass); | |||||
| } | } | ||||
| if (workbook == null || entity == null || pojoClass == null | if (workbook == null || entity == null || pojoClass == null | ||||
| || dataSet == null) { | || dataSet == null) { | ||||
| @@ -71,6 +73,9 @@ public class ExcelExportServer extends ExcelExportBase { | |||||
| Map<String, HSSFCellStyle> styles = createStyles(workbook); | Map<String, HSSFCellStyle> styles = createStyles(workbook); | ||||
| Drawing patriarch = sheet.createDrawingPatriarch(); | Drawing patriarch = sheet.createDrawingPatriarch(); | ||||
| List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>(); | List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>(); | ||||
| if (entity.isAddIndex()) { | |||||
| excelParams.add(indexExcelEntity()); | |||||
| } | |||||
| // 得到所有字段 | // 得到所有字段 | ||||
| Field fileds[] = POIPublicUtil.getClassFields(pojoClass); | Field fileds[] = POIPublicUtil.getClassFields(pojoClass); | ||||
| ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class); | ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class); | ||||
| @@ -83,7 +88,7 @@ public class ExcelExportServer extends ExcelExportBase { | |||||
| int titleHeight = index; | int titleHeight = index; | ||||
| setCellWith(excelParams, sheet); | setCellWith(excelParams, sheet); | ||||
| short rowHeight = getRowHeight(excelParams); | short rowHeight = getRowHeight(excelParams); | ||||
| setCurrentIndex(1); | |||||
| Iterator<?> its = dataSet.iterator(); | Iterator<?> its = dataSet.iterator(); | ||||
| List<Object> tempList = new ArrayList<Object>(); | List<Object> tempList = new ArrayList<Object>(); | ||||
| while (its.hasNext()) { | while (its.hasNext()) { | ||||
| @@ -107,12 +112,21 @@ public class ExcelExportServer extends ExcelExportBase { | |||||
| } | } | ||||
| } catch (Exception e) { | } catch (Exception e) { | ||||
| e.printStackTrace(); | |||||
| logger.error(e.getMessage(),e.fillInStackTrace()); | |||||
| throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, | throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, | ||||
| e.getCause()); | e.getCause()); | ||||
| } | } | ||||
| } | } | ||||
| private ExcelExportEntity indexExcelEntity() { | |||||
| ExcelExportEntity entity = new ExcelExportEntity(); | |||||
| entity.setOrderNum(0); | |||||
| entity.setName("序号"); | |||||
| entity.setWidth(10); | |||||
| entity.setFormat(PoiBaseConstants.IS_ADD_INDEX); | |||||
| return entity; | |||||
| } | |||||
| private int createHeaderAndTitle(ExportParams entity, Sheet sheet, | private int createHeaderAndTitle(ExportParams entity, Sheet sheet, | ||||
| HSSFWorkbook workbook, List<ExcelExportEntity> excelParams) { | HSSFWorkbook workbook, List<ExcelExportEntity> excelParams) { | ||||
| int rows = 0, feildWidth = getFieldWidth(excelParams); | int rows = 0, feildWidth = getFieldWidth(excelParams); | ||||
| @@ -298,4 +312,69 @@ public class ExcelExportServer extends ExcelExportBase { | |||||
| return map.get("two"); | return map.get("two"); | ||||
| } | } | ||||
| public void createSheetForMap(HSSFWorkbook workbook, ExportParams entity, | |||||
| List<ExcelExportEntity> entityList, | |||||
| Collection<? extends Map<?, ?>> dataSet) { | |||||
| if (workbook == null || entity == null || entityList == null | |||||
| || dataSet == null) { | |||||
| throw new ExcelExportException(ExcelExportEnum.PARAMETER_ERROR); | |||||
| } | |||||
| Sheet sheet = null; | |||||
| try { | |||||
| sheet = workbook.createSheet(entity.getSheetName()); | |||||
| } catch (Exception e) { | |||||
| // 重复遍历,出现了重名现象,创建非指定的名称Sheet | |||||
| sheet = workbook.createSheet(); | |||||
| } | |||||
| try { | |||||
| dataHanlder = entity.getDataHanlder(); | |||||
| if (dataHanlder != null) { | |||||
| needHanlderList = Arrays.asList(dataHanlder | |||||
| .getNeedHandlerFields()); | |||||
| } | |||||
| // 创建表格属性 | |||||
| Map<String, HSSFCellStyle> styles = createStyles(workbook); | |||||
| Drawing patriarch = sheet.createDrawingPatriarch(); | |||||
| List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>(); | |||||
| if (entity.isAddIndex()) { | |||||
| excelParams.add(indexExcelEntity()); | |||||
| } | |||||
| excelParams.addAll(entityList); | |||||
| sortAllParams(excelParams); | |||||
| int index = createHeaderAndTitle(entity, sheet, workbook, | |||||
| excelParams); | |||||
| int titleHeight = index; | |||||
| setCellWith(excelParams, sheet); | |||||
| short rowHeight = getRowHeight(excelParams); | |||||
| setCurrentIndex(1); | |||||
| Iterator<?> its = dataSet.iterator(); | |||||
| List<Object> tempList = new ArrayList<Object>(); | |||||
| while (its.hasNext()) { | |||||
| Object t = its.next(); | |||||
| index += createCells(patriarch, index, t, excelParams, sheet, | |||||
| workbook, styles, rowHeight); | |||||
| tempList.add(t); | |||||
| if (index >= MAX_NUM) | |||||
| break; | |||||
| } | |||||
| mergeCells(sheet, excelParams, titleHeight); | |||||
| its = dataSet.iterator(); | |||||
| for (int i = 0, le = tempList.size(); i < le; i++) { | |||||
| its.next(); | |||||
| its.remove(); | |||||
| } | |||||
| // 发现还有剩余list 继续循环创建Sheet | |||||
| if (dataSet.size() > 0) { | |||||
| createSheetForMap(workbook, entity, entityList, dataSet); | |||||
| } | |||||
| } catch (Exception e) { | |||||
| e.printStackTrace(); | |||||
| logger.error(e.getMessage(),e.fillInStackTrace()); | |||||
| throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, | |||||
| e.getCause()); | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -28,6 +28,7 @@ import org.apache.poi.ss.usermodel.Workbook; | |||||
| import org.apache.poi.ss.util.CellRangeAddress; | import org.apache.poi.ss.util.CellRangeAddress; | ||||
| import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; | import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; | ||||
| import org.jeecgframework.poi.excel.entity.params.MergeEntity; | import org.jeecgframework.poi.excel.entity.params.MergeEntity; | ||||
| import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants; | |||||
| import org.jeecgframework.poi.util.POIPublicUtil; | import org.jeecgframework.poi.util.POIPublicUtil; | ||||
| /** | /** | ||||
| @@ -38,6 +39,8 @@ import org.jeecgframework.poi.util.POIPublicUtil; | |||||
| */ | */ | ||||
| public abstract class ExcelExportBase extends ExportBase { | public abstract class ExcelExportBase extends ExportBase { | ||||
| private int currentIndex = 0; | |||||
| /** | /** | ||||
| * 合并单元格 | * 合并单元格 | ||||
| * | * | ||||
| @@ -213,7 +216,9 @@ public abstract class ExcelExportBase extends ExportBase { | |||||
| Row row = sheet.createRow(index); | Row row = sheet.createRow(index); | ||||
| row.setHeight(rowHeight); | row.setHeight(rowHeight); | ||||
| int maxHeight = 1, cellNum = 0; | int maxHeight = 1, cellNum = 0; | ||||
| for (int k = 0, paramSize = excelParams.size(); k < paramSize; k++) { | |||||
| int indexKey = createIndexCell(row, styles, index, excelParams.get(0)); | |||||
| cellNum += indexKey; | |||||
| for (int k = indexKey, paramSize = excelParams.size(); k < paramSize; k++) { | |||||
| entity = excelParams.get(k); | entity = excelParams.get(k); | ||||
| if (entity.getList() != null) { | if (entity.getList() != null) { | ||||
| Collection<?> list = (Collection<?>) entity.getMethod().invoke( | Collection<?> list = (Collection<?>) entity.getMethod().invoke( | ||||
| @@ -246,7 +251,7 @@ public abstract class ExcelExportBase extends ExportBase { | |||||
| } | } | ||||
| // 合并需要合并的单元格 | // 合并需要合并的单元格 | ||||
| cellNum = 0; | cellNum = 0; | ||||
| for (int k = 0, paramSize = excelParams.size(); k < paramSize; k++) { | |||||
| for (int k = indexKey, paramSize = excelParams.size(); k < paramSize; k++) { | |||||
| entity = excelParams.get(k); | entity = excelParams.get(k); | ||||
| if (entity.getList() != null) { | if (entity.getList() != null) { | ||||
| cellNum += entity.getList().size(); | cellNum += entity.getList().size(); | ||||
| @@ -260,6 +265,20 @@ public abstract class ExcelExportBase extends ExportBase { | |||||
| } | } | ||||
| private int createIndexCell(Row row, Map<String, HSSFCellStyle> styles, | |||||
| int index, ExcelExportEntity excelExportEntity) { | |||||
| if (excelExportEntity.getName().equals("序号") | |||||
| && excelExportEntity.getFormat().equals( | |||||
| PoiBaseConstants.IS_ADD_INDEX)) { | |||||
| createStringCell(row, 0, currentIndex + "", | |||||
| index % 2 == 0 ? getStyles(styles, false, false) | |||||
| : getStyles(styles, true, false), null); | |||||
| currentIndex = currentIndex + 1; | |||||
| return 1; | |||||
| } | |||||
| return 0; | |||||
| } | |||||
| public CellStyle getStyles(Map<String, HSSFCellStyle> styles, boolean b, | public CellStyle getStyles(Map<String, HSSFCellStyle> styles, boolean b, | ||||
| boolean wrap) { | boolean wrap) { | ||||
| return null; | return null; | ||||
| @@ -417,4 +436,8 @@ public abstract class ExcelExportBase extends ExportBase { | |||||
| return length; | return length; | ||||
| } | } | ||||
| public void setCurrentIndex(int currentIndex) { | |||||
| this.currentIndex = currentIndex; | |||||
| } | |||||
| } | } | ||||
| @@ -9,6 +9,7 @@ import java.util.Arrays; | |||||
| import java.util.Collections; | import java.util.Collections; | ||||
| import java.util.Date; | import java.util.Date; | ||||
| import java.util.List; | import java.util.List; | ||||
| import java.util.Map; | |||||
| import org.apache.commons.lang.StringUtils; | import org.apache.commons.lang.StringUtils; | ||||
| import org.jeecgframework.poi.excel.annotation.Excel; | import org.jeecgframework.poi.excel.annotation.Excel; | ||||
| @@ -26,7 +27,7 @@ import org.jeecgframework.poi.util.POIPublicUtil; | |||||
| * @date 2014年8月9日 下午11:01:32 | * @date 2014年8月9日 下午11:01:32 | ||||
| */ | */ | ||||
| public class ExportBase { | public class ExportBase { | ||||
| protected IExcelDataHandler dataHanlder; | protected IExcelDataHandler dataHanlder; | ||||
| protected List<String> needHanlderList; | protected List<String> needHanlderList; | ||||
| @@ -54,7 +55,11 @@ public class ExportBase { | |||||
| targetId)) { | targetId)) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| if (POIPublicUtil.isCollection(field.getType())) { | |||||
| // 首先判断Excel 可能一下特殊数据用户回自定义处理 | |||||
| if (field.getAnnotation(Excel.class) != null) { | |||||
| excelParams.add(createExcelExportEntity(field, targetId, | |||||
| pojoClass, getMethods)); | |||||
| } else if (POIPublicUtil.isCollection(field.getType())) { | |||||
| ExcelCollection excel = field | ExcelCollection excel = field | ||||
| .getAnnotation(ExcelCollection.class); | .getAnnotation(ExcelCollection.class); | ||||
| ParameterizedType pt = (ParameterizedType) field | ParameterizedType pt = (ParameterizedType) field | ||||
| @@ -73,9 +78,6 @@ public class ExportBase { | |||||
| pojoClass)); | pojoClass)); | ||||
| excelEntity.setList(list); | excelEntity.setList(list); | ||||
| excelParams.add(excelEntity); | excelParams.add(excelEntity); | ||||
| } else if (POIPublicUtil.isJavaClass(field)) { | |||||
| excelParams.add(createExcelExportEntity(field, targetId, | |||||
| pojoClass, getMethods)); | |||||
| } else { | } else { | ||||
| List<Method> newMethods = new ArrayList<Method>(); | List<Method> newMethods = new ArrayList<Method>(); | ||||
| if (getMethods != null) { | if (getMethods != null) { | ||||
| @@ -108,7 +110,12 @@ public class ExportBase { | |||||
| throws Exception { | throws Exception { | ||||
| Excel excel = field.getAnnotation(Excel.class); | Excel excel = field.getAnnotation(Excel.class); | ||||
| ExcelExportEntity excelEntity = new ExcelExportEntity(); | ExcelExportEntity excelEntity = new ExcelExportEntity(); | ||||
| excelEntity.setType(excel.type()); | |||||
| try { | |||||
| excelEntity.setType(excel.type()); | |||||
| } catch (Exception e) { | |||||
| // TODO Auto-generated catch block | |||||
| e.printStackTrace(); | |||||
| } | |||||
| getExcelField(targetId, field, excelEntity, excel, pojoClass); | getExcelField(targetId, field, excelEntity, excel, pojoClass); | ||||
| if (getMethods != null) { | if (getMethods != null) { | ||||
| List<Method> newMethods = new ArrayList<Method>(); | List<Method> newMethods = new ArrayList<Method>(); | ||||
| @@ -203,8 +210,10 @@ public class ExportBase { | |||||
| String fieldname = field.getName(); | String fieldname = field.getName(); | ||||
| excelEntity.setMethod(POIPublicUtil.getMethod(fieldname, pojoClass)); | excelEntity.setMethod(POIPublicUtil.getMethod(fieldname, pojoClass)); | ||||
| } | } | ||||
| /** | /** | ||||
| * 根据注解获取行高 | * 根据注解获取行高 | ||||
| * | |||||
| * @param excelParams | * @param excelParams | ||||
| * @return | * @return | ||||
| */ | */ | ||||
| @@ -223,7 +232,6 @@ public class ExportBase { | |||||
| } | } | ||||
| return (short) (maxHeight * 50); | return (short) (maxHeight * 50); | ||||
| } | } | ||||
| /** | /** | ||||
| * 对字段根据用户设置排序 | * 对字段根据用户设置排序 | ||||
| @@ -236,7 +244,7 @@ public class ExportBase { | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| /** | /** | ||||
| * 获取填如这个cell的值,提供一些附加功能 | * 获取填如这个cell的值,提供一些附加功能 | ||||
| * | * | ||||
| @@ -247,9 +255,14 @@ public class ExportBase { | |||||
| */ | */ | ||||
| public Object getCellValue(ExcelExportEntity entity, Object obj) | public Object getCellValue(ExcelExportEntity entity, Object obj) | ||||
| throws Exception { | throws Exception { | ||||
| Object value = entity.getMethods() != null ? getFieldBySomeMethod( | |||||
| entity.getMethods(), obj) : entity.getMethod().invoke(obj, | |||||
| new Object[] {}); | |||||
| Object value; | |||||
| if (obj instanceof Map) { | |||||
| return ((Map<?, ?>) obj).get(entity.getKey()); | |||||
| } else { | |||||
| value = entity.getMethods() != null ? getFieldBySomeMethod( | |||||
| entity.getMethods(), obj) : entity.getMethod().invoke(obj, | |||||
| new Object[] {}); | |||||
| } | |||||
| if (needHanlderList != null | if (needHanlderList != null | ||||
| && needHanlderList.contains(entity.getName())) { | && needHanlderList.contains(entity.getName())) { | ||||
| value = dataHanlder.exportHandler(obj, entity.getName(), value); | value = dataHanlder.exportHandler(obj, entity.getName(), value); | ||||
| @@ -290,7 +303,7 @@ public class ExportBase { | |||||
| } | } | ||||
| return value; | return value; | ||||
| } | } | ||||
| /** | /** | ||||
| * 多个反射获取值 | * 多个反射获取值 | ||||
| * | * | ||||
| @@ -32,6 +32,7 @@ import org.jeecgframework.poi.util.POIPublicUtil; | |||||
| * @version 1.0 | * @version 1.0 | ||||
| */ | */ | ||||
| public final class ExcelExportOfTemplateUtil extends ExcelExportBase { | public final class ExcelExportOfTemplateUtil extends ExcelExportBase { | ||||
| public Workbook createExcleByTemplate(TemplateExportParams params, | public Workbook createExcleByTemplate(TemplateExportParams params, | ||||
| Class<?> pojoClass, Collection<?> dataSet, Map<String, Object> map) { | Class<?> pojoClass, Collection<?> dataSet, Map<String, Object> map) { | ||||
| @@ -44,19 +45,13 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { | |||||
| // step 2. 判断模板的Excel类型,解析模板 | // step 2. 判断模板的Excel类型,解析模板 | ||||
| try { | try { | ||||
| wb = getCloneWorkBook(params); | wb = getCloneWorkBook(params); | ||||
| // step 3. 删除其他的sheet | |||||
| for (int i = wb.getNumberOfSheets() - 1; i >= 0; i--) { | |||||
| if (i != params.getSheetNum()) { | |||||
| wb.removeSheetAt(i); | |||||
| } | |||||
| } | |||||
| if (StringUtils.isNotEmpty(params.getSheetName())) { | if (StringUtils.isNotEmpty(params.getSheetName())) { | ||||
| wb.setSheetName(0, params.getSheetName()); | wb.setSheetName(0, params.getSheetName()); | ||||
| } | } | ||||
| // step 4. 解析模板 | |||||
| // step 3. 解析模板 | |||||
| parseTemplate(wb.getSheetAt(0), map); | parseTemplate(wb.getSheetAt(0), map); | ||||
| if (dataSet != null) { | if (dataSet != null) { | ||||
| // step 5. 正常的数据填充 | |||||
| // step 4. 正常的数据填充 | |||||
| dataHanlder = params.getDataHanlder(); | dataHanlder = params.getDataHanlder(); | ||||
| if (dataHanlder != null) { | if (dataHanlder != null) { | ||||
| needHanlderList = Arrays.asList(dataHanlder | needHanlderList = Arrays.asList(dataHanlder | ||||
| @@ -141,6 +141,9 @@ public class CellValueServer { | |||||
| */ | */ | ||||
| private Object getCellValue(String xclass, Cell cell, | private Object getCellValue(String xclass, Cell cell, | ||||
| ExcelImportEntity entity) { | ExcelImportEntity entity) { | ||||
| if(cell == null){ | |||||
| return ""; | |||||
| } | |||||
| Object result = null; | Object result = null; | ||||
| // 日期格式比较特殊,和cell格式不一致 | // 日期格式比较特殊,和cell格式不一致 | ||||
| if (xclass.equals("class java.util.Date")) { | if (xclass.equals("class java.util.Date")) { | ||||
| @@ -94,6 +94,9 @@ public class ExcelImportServer { | |||||
| } | } | ||||
| Map<String, PictureData> pictures; | Map<String, PictureData> pictures; | ||||
| for (int i = 0; i < params.getSheetNum(); i++) { | for (int i = 0; i < params.getSheetNum(); i++) { | ||||
| if(logger.isDebugEnabled()){ | |||||
| logger.debug(" start to read excel by is ,startTime is {}", new Date().getTime()); | |||||
| } | |||||
| if (isXSSFWorkbook) { | if (isXSSFWorkbook) { | ||||
| pictures = POIPublicUtil.getSheetPictrues07( | pictures = POIPublicUtil.getSheetPictrues07( | ||||
| (XSSFSheet) book.getSheetAt(i), (XSSFWorkbook) book); | (XSSFSheet) book.getSheetAt(i), (XSSFWorkbook) book); | ||||
| @@ -101,8 +104,14 @@ public class ExcelImportServer { | |||||
| pictures = POIPublicUtil.getSheetPictrues03( | pictures = POIPublicUtil.getSheetPictrues03( | ||||
| (HSSFSheet) book.getSheetAt(i), (HSSFWorkbook) book); | (HSSFSheet) book.getSheetAt(i), (HSSFWorkbook) book); | ||||
| } | } | ||||
| if(logger.isDebugEnabled()){ | |||||
| logger.debug(" end to read excel by is ,endTime is {}", new Date().getTime()); | |||||
| } | |||||
| result.addAll(importExcel(result, book.getSheetAt(i), pojoClass, | result.addAll(importExcel(result, book.getSheetAt(i), pojoClass, | ||||
| params, pictures)); | params, pictures)); | ||||
| if(logger.isDebugEnabled()){ | |||||
| logger.debug(" end to read excel list by pos ,endTime is {}", new Date().getTime()); | |||||
| } | |||||
| } | } | ||||
| if (params.isNeedSave()) { | if (params.isNeedSave()) { | ||||
| saveThisExcel(params, pojoClass, isXSSFWorkbook, book); | saveThisExcel(params, pojoClass, isXSSFWorkbook, book); | ||||
| @@ -141,8 +150,7 @@ public class ExcelImportServer { | |||||
| if (params.getSaveUrl().equals("upload/excelUpload")) { | if (params.getSaveUrl().equals("upload/excelUpload")) { | ||||
| url = pojoClass.getName().split("\\.")[pojoClass.getName().split( | url = pojoClass.getName().split("\\.")[pojoClass.getName().split( | ||||
| "\\.").length - 1]; | "\\.").length - 1]; | ||||
| return params.getSaveUrl() + "/" | |||||
| + url.substring(0, url.lastIndexOf("Entity")); | |||||
| return params.getSaveUrl() + "/" + url; | |||||
| } | } | ||||
| return params.getSaveUrl(); | return params.getSaveUrl(); | ||||
| } | } | ||||
| @@ -11,19 +11,19 @@ | |||||
| <attribute name="maven.pomderived" value="true"/> | <attribute name="maven.pomderived" value="true"/> | ||||
| </attributes> | </attributes> | ||||
| </classpathentry> | </classpathentry> | ||||
| <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"> | |||||
| <classpathentry kind="src" output="target/test-classes" path="src/test/java"> | |||||
| <attributes> | <attributes> | ||||
| <attribute name="optional" value="true"/> | |||||
| <attribute name="maven.pomderived" value="true"/> | <attribute name="maven.pomderived" value="true"/> | ||||
| </attributes> | </attributes> | ||||
| </classpathentry> | </classpathentry> | ||||
| <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> | |||||
| <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"> | |||||
| <attributes> | <attributes> | ||||
| <attribute name="maven.pomderived" value="true"/> | <attribute name="maven.pomderived" value="true"/> | ||||
| </attributes> | </attributes> | ||||
| </classpathentry> | </classpathentry> | ||||
| <classpathentry kind="src" output="target/test-classes" path="src/test/java"> | |||||
| <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> | |||||
| <attributes> | <attributes> | ||||
| <attribute name="optional" value="true"/> | |||||
| <attribute name="maven.pomderived" value="true"/> | <attribute name="maven.pomderived" value="true"/> | ||||
| </attributes> | </attributes> | ||||
| </classpathentry> | </classpathentry> | ||||
| @@ -4,7 +4,7 @@ | |||||
| <parent> | <parent> | ||||
| <groupId>org.jeecgframework</groupId> | <groupId>org.jeecgframework</groupId> | ||||
| <artifactId>easypoi</artifactId> | <artifactId>easypoi</artifactId> | ||||
| <version>2.0.2</version> | |||||
| <version>2.0.6-SNAPSHOT</version> | |||||
| </parent> | </parent> | ||||
| <artifactId>easypoi-test</artifactId> | <artifactId>easypoi-test</artifactId> | ||||
| <dependencies> | <dependencies> | ||||
| @@ -0,0 +1,146 @@ | |||||
| package org.jeecgframework.poi.entity; | |||||
| import java.util.Date; | |||||
| import org.jeecgframework.poi.excel.annotation.Excel; | |||||
| import org.jeecgframework.poi.excel.annotation.ExcelEntity; | |||||
| /** | |||||
| * @Title: Entity | |||||
| * @Description: 通讯录 | |||||
| * @author JueYue | |||||
| * @date 2014-09-22 16:03:32 | |||||
| * @version V1.0 | |||||
| * | |||||
| */ | |||||
| @SuppressWarnings("serial") | |||||
| public class MsgClient implements java.io.Serializable { | |||||
| /** id */ | |||||
| private java.lang.String id; | |||||
| // 电话号码(主键) | |||||
| @Excel(name = "电话号码") | |||||
| private String clientPhone = null; | |||||
| // 客户姓名 | |||||
| @Excel(name = "姓名") | |||||
| private String clientName = null; | |||||
| // 所属分组 | |||||
| @ExcelEntity | |||||
| private MsgClientGroup group = null; | |||||
| // 备注 | |||||
| @Excel(name = "备注") | |||||
| private String remark = null; | |||||
| // 生日 | |||||
| @Excel(name = "出生日期") | |||||
| private Date birthday = null; | |||||
| // 创建人 | |||||
| private String createBy = null; | |||||
| /** | |||||
| * 方法: 取得java.lang.String | |||||
| * | |||||
| * @return: java.lang.String id | |||||
| */ | |||||
| public java.lang.String getId() { | |||||
| return this.id; | |||||
| } | |||||
| /** | |||||
| * 方法: 设置java.lang.String | |||||
| * | |||||
| * @param: java.lang.String id | |||||
| */ | |||||
| public void setId(java.lang.String id) { | |||||
| this.id = id; | |||||
| } | |||||
| /** | |||||
| * 方法: 取得java.lang.String | |||||
| * | |||||
| * @return: java.lang.String 电话号码 | |||||
| */ | |||||
| public java.lang.String getClientPhone() { | |||||
| return this.clientPhone; | |||||
| } | |||||
| /** | |||||
| * 方法: 设置java.lang.String | |||||
| * | |||||
| * @param: java.lang.String 电话号码 | |||||
| */ | |||||
| public void setClientPhone(java.lang.String clientPhone) { | |||||
| this.clientPhone = clientPhone; | |||||
| } | |||||
| public MsgClientGroup getGroup() { | |||||
| return group; | |||||
| } | |||||
| public void setGroup(MsgClientGroup group) { | |||||
| this.group = group; | |||||
| } | |||||
| /** | |||||
| * 方法: 取得java.lang.String | |||||
| * | |||||
| * @return: java.lang.String 客户姓名 | |||||
| */ | |||||
| public java.lang.String getClientName() { | |||||
| return this.clientName; | |||||
| } | |||||
| /** | |||||
| * 方法: 设置java.lang.String | |||||
| * | |||||
| * @param: java.lang.String 客户姓名 | |||||
| */ | |||||
| public void setClientName(java.lang.String clientName) { | |||||
| this.clientName = clientName; | |||||
| } | |||||
| /** | |||||
| * 方法: 取得java.lang.String | |||||
| * | |||||
| * @return: java.lang.String 备注 | |||||
| */ | |||||
| public java.lang.String getRemark() { | |||||
| return this.remark; | |||||
| } | |||||
| /** | |||||
| * 方法: 设置java.lang.String | |||||
| * | |||||
| * @param remark | |||||
| * | |||||
| * @param: java.lang.String 备注 | |||||
| */ | |||||
| public void setRemark(java.lang.String remark) { | |||||
| this.remark = remark; | |||||
| } | |||||
| /** | |||||
| * 方法: 取得java.util.Date | |||||
| * | |||||
| * @return: java.util.Date 生日 | |||||
| */ | |||||
| public java.util.Date getBirthday() { | |||||
| return this.birthday; | |||||
| } | |||||
| /** | |||||
| * 方法: 设置java.util.Date | |||||
| * | |||||
| * @param: java.util.Date 生日 | |||||
| */ | |||||
| public void setBirthday(java.util.Date birthday) { | |||||
| this.birthday = birthday; | |||||
| } | |||||
| public String getCreateBy() { | |||||
| return createBy; | |||||
| } | |||||
| public void setCreateBy(String createBy) { | |||||
| this.createBy = createBy; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,57 @@ | |||||
| package org.jeecgframework.poi.entity; | |||||
| import java.io.Serializable; | |||||
| import java.util.List; | |||||
| import org.jeecgframework.poi.excel.annotation.Excel; | |||||
| /** | |||||
| * 客户分组表 | |||||
| * | |||||
| * @author yjl | |||||
| * | |||||
| */ | |||||
| public class MsgClientGroup implements Serializable{ | |||||
| /** | |||||
| * | |||||
| */ | |||||
| private static final long serialVersionUID = 6946265640897464878L; | |||||
| // 组名 | |||||
| @Excel(name ="分组") | |||||
| private String groupName = null; | |||||
| /** | |||||
| * 创建人 | |||||
| */ | |||||
| private String createBy; | |||||
| // 一个组下 可能存在N多客户 | |||||
| //private List<MsgClientMine> clients = null; | |||||
| public String getGroupName() { | |||||
| return groupName; | |||||
| } | |||||
| public void setGroupName(String groupName) { | |||||
| this.groupName = groupName; | |||||
| } | |||||
| /*@org.codehaus.jackson.annotate.JsonIgnore | |||||
| @OneToMany(cascade = CascadeType.REMOVE,fetch = FetchType.LAZY,mappedBy = "group") | |||||
| public List<MsgClientMine> getClients() { | |||||
| return clients; | |||||
| } | |||||
| public void setClients(List<MsgClientMine> clients) { | |||||
| this.clients = clients; | |||||
| }*/ | |||||
| public String getCreateBy() { | |||||
| return createBy; | |||||
| } | |||||
| public void setCreateBy(String createBy) { | |||||
| this.createBy = createBy; | |||||
| } | |||||
| } | |||||
| @@ -4,9 +4,11 @@ import static org.junit.Assert.*; | |||||
| import java.io.File; | import java.io.File; | ||||
| import java.util.Collection; | import java.util.Collection; | ||||
| import java.util.Date; | |||||
| import java.util.List; | import java.util.List; | ||||
| import org.jeecgframework.poi.entity.CourseEntity; | import org.jeecgframework.poi.entity.CourseEntity; | ||||
| import org.jeecgframework.poi.entity.MsgClient; | |||||
| import org.jeecgframework.poi.entity.StudentEntity; | import org.jeecgframework.poi.entity.StudentEntity; | ||||
| import org.jeecgframework.poi.excel.entity.ImportParams; | import org.jeecgframework.poi.excel.entity.ImportParams; | ||||
| import org.junit.Test; | import org.junit.Test; | ||||
| @@ -18,11 +20,13 @@ public class ExcelImportUtilTest { | |||||
| ImportParams params = new ImportParams(); | ImportParams params = new ImportParams(); | ||||
| params.setTitleRows(2); | params.setTitleRows(2); | ||||
| params.setHeadRows(2); | params.setHeadRows(2); | ||||
| //params.setSheetNum(9); | |||||
| params.setNeedSave(true); | |||||
| long start = new Date().getTime(); | |||||
| List<CourseEntity> list = ExcelImportUtil.importExcel(new File( | List<CourseEntity> list = ExcelImportUtil.importExcel(new File( | ||||
| "d:/tt.xls"), CourseEntity.class, params); | "d:/tt.xls"), CourseEntity.class, params); | ||||
| for (int i = 0; i < list.size(); i++) { | |||||
| System.out.println(list.get(i).getName()); | |||||
| } | |||||
| System.out.println(list.size() + "-----" | |||||
| + (new Date().getTime() - start)); | |||||
| } | } | ||||
| } | } | ||||
| @@ -0,0 +1,51 @@ | |||||
| package org.jeecgframework.poi.excel.test; | |||||
| import static org.junit.Assert.*; | |||||
| import org.apache.poi.hssf.usermodel.HSSFWorkbook; | |||||
| import org.jeecgframework.poi.entity.TeacherEntity; | |||||
| import org.jeecgframework.poi.excel.ExcelExportUtil; | |||||
| import org.jeecgframework.poi.excel.entity.ExportParams; | |||||
| import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; | |||||
| import java.io.FileNotFoundException; | |||||
| import java.io.FileOutputStream; | |||||
| import java.io.IOException; | |||||
| import java.util.ArrayList; | |||||
| import java.util.HashMap; | |||||
| import java.util.List; | |||||
| import java.util.Map; | |||||
| import org.junit.Test; | |||||
| public class ExcelExportForMap { | |||||
| @Test | |||||
| public void test() { | |||||
| try { | |||||
| List<ExcelExportEntity> entity = new ArrayList<ExcelExportEntity>(); | |||||
| entity.add(new ExcelExportEntity("姓名", "name")); | |||||
| entity.add(new ExcelExportEntity("性别", "sex")); | |||||
| List<Map<String, String>> list = new ArrayList<Map<String, String>>(); | |||||
| Map<String, String> map; | |||||
| for (int i = 0; i < 10; i++) { | |||||
| map = new HashMap<String, String>(); | |||||
| map.put("name", "1" + i); | |||||
| map.put("sex", "2" + i); | |||||
| list.add(map); | |||||
| } | |||||
| HSSFWorkbook workbook = ExcelExportUtil.exportExcel(new ExportParams( | |||||
| "测试", "测试"), entity, list); | |||||
| FileOutputStream fos = new FileOutputStream("d:/tt.xls"); | |||||
| workbook.write(fos); | |||||
| fos.close(); | |||||
| } catch (FileNotFoundException e) { | |||||
| e.printStackTrace(); | |||||
| } catch (IOException e) { | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,108 @@ | |||||
| package org.jeecgframework.poi.excel.test; | |||||
| import java.io.File; | |||||
| import java.io.FileNotFoundException; | |||||
| import java.io.FileOutputStream; | |||||
| import java.util.ArrayList; | |||||
| import java.util.Date; | |||||
| import java.util.HashMap; | |||||
| import java.util.List; | |||||
| import java.util.Map; | |||||
| import org.apache.poi.ss.usermodel.Workbook; | |||||
| import org.jeecgframework.poi.entity.CourseEntity; | |||||
| import org.jeecgframework.poi.entity.StudentEntity; | |||||
| import org.jeecgframework.poi.entity.TeacherEntity; | |||||
| import org.jeecgframework.poi.excel.ExcelExportUtil; | |||||
| import org.jeecgframework.poi.excel.entity.TemplateExportParams; | |||||
| import org.junit.Before; | |||||
| import org.junit.Test; | |||||
| public class ExcelExportTemplateTest { | |||||
| List<CourseEntity> list = new ArrayList<CourseEntity>(); | |||||
| CourseEntity courseEntity; | |||||
| @Before | |||||
| public void testBefore() { | |||||
| courseEntity = new CourseEntity(); | |||||
| courseEntity.setId("1131"); | |||||
| courseEntity.setName("小白"); | |||||
| TeacherEntity teacherEntity = new TeacherEntity(); | |||||
| teacherEntity.setId("12131231"); | |||||
| teacherEntity.setName("你们"); | |||||
| courseEntity.setTeacher(teacherEntity); | |||||
| teacherEntity = new TeacherEntity(); | |||||
| teacherEntity.setId("121312314312421131"); | |||||
| teacherEntity.setName("老王"); | |||||
| courseEntity.setShuxueteacher(teacherEntity); | |||||
| StudentEntity studentEntity = new StudentEntity(); | |||||
| studentEntity.setId("11231"); | |||||
| studentEntity.setName("撒旦法司法局"); | |||||
| studentEntity.setBirthday(new Date()); | |||||
| studentEntity.setSex(1); | |||||
| List<StudentEntity> studentList = new ArrayList<StudentEntity>(); | |||||
| studentList.add(studentEntity); | |||||
| studentList.add(studentEntity); | |||||
| courseEntity.setStudents(studentList); | |||||
| for (int i = 0; i < 3; i++) { | |||||
| list.add(courseEntity); | |||||
| } | |||||
| } | |||||
| //@Test | |||||
| public void one () throws Exception{ | |||||
| TemplateExportParams params = new TemplateExportParams(); | |||||
| params.setHeadingRows(2); | |||||
| params.setHeadingStartRow(2); | |||||
| Map<String,Object> map = new HashMap<String, Object>(); | |||||
| map.put("year", "2013"); | |||||
| map.put("sunCourses", list.size()); | |||||
| Map<String,Object> obj = new HashMap<String, Object>(); | |||||
| map.put("obj", obj); | |||||
| obj.put("name", list.size()); | |||||
| params.setTemplateUrl("org/jeecgframework/poi/excel/doc/exportTemp.xls"); | |||||
| Workbook book = ExcelExportUtil.exportExcel(params, CourseEntity.class, list, | |||||
| map); | |||||
| File savefile = new File("d:/"); | |||||
| if (!savefile.exists()) { | |||||
| savefile.mkdirs(); | |||||
| } | |||||
| FileOutputStream fos = new FileOutputStream("d:/exportTemp.xls"); | |||||
| book.write(fos); | |||||
| fos.close(); | |||||
| } | |||||
| @Test | |||||
| public void two () throws Exception{ | |||||
| TemplateExportParams params = new TemplateExportParams(); | |||||
| Map<String,Object> map = new HashMap<String, Object>(); | |||||
| map.put("month", 10); | |||||
| Map<String,Object> temp; | |||||
| for(int i = 1;i<8;i++){ | |||||
| temp = new HashMap<String, Object>(); | |||||
| temp.put("per", i*10); | |||||
| temp.put("mon", i*1000); | |||||
| temp.put("summon", i*10000); | |||||
| map.put("i"+i, temp); | |||||
| } | |||||
| params.setTemplateUrl("org/jeecgframework/poi/excel/doc/exportTemp.xls"); | |||||
| params.setSheetNum(1); | |||||
| Workbook book = ExcelExportUtil.exportExcel(params, CourseEntity.class, list, | |||||
| map); | |||||
| File savefile = new File("d:/"); | |||||
| if (!savefile.exists()) { | |||||
| savefile.mkdirs(); | |||||
| } | |||||
| FileOutputStream fos = new FileOutputStream("d:/exportTemp2.xls"); | |||||
| book.write(fos); | |||||
| fos.close(); | |||||
| } | |||||
| } | |||||
| @@ -59,7 +59,6 @@ public class ExcelExportUtilIdTest { | |||||
| telist.add(teacherEntity); | telist.add(teacherEntity); | ||||
| } | } | ||||
| } | } | ||||
| /** | /** | ||||
| * 单行表头导出测试 | * 单行表头导出测试 | ||||
| @@ -68,8 +67,10 @@ public class ExcelExportUtilIdTest { | |||||
| */ | */ | ||||
| @Test | @Test | ||||
| public void testExportExcel() throws Exception { | public void testExportExcel() throws Exception { | ||||
| HSSFWorkbook workbook = ExcelExportUtil.exportExcel(new ExportParams( | |||||
| "2412312", "测试", "测试"), TeacherEntity.class, telist); | |||||
| ExportParams params = new ExportParams("2412312", "测试", "测试"); | |||||
| params.setAddIndex(true); | |||||
| HSSFWorkbook workbook = ExcelExportUtil.exportExcel(params, | |||||
| TeacherEntity.class, telist); | |||||
| FileOutputStream fos = new FileOutputStream("d:/tt.xls"); | FileOutputStream fos = new FileOutputStream("d:/tt.xls"); | ||||
| workbook.write(fos); | workbook.write(fos); | ||||
| fos.close(); | fos.close(); | ||||
| @@ -62,7 +62,7 @@ public class ExcelExportUtilTest { | |||||
| * | * | ||||
| * @throws Exception | * @throws Exception | ||||
| */ | */ | ||||
| @Test | |||||
| //@Test | |||||
| public void testExportExcel() throws Exception { | public void testExportExcel() throws Exception { | ||||
| Date start = new Date(); | Date start = new Date(); | ||||
| HSSFWorkbook workbook = ExcelExportUtil.exportExcel(new ExportParams( | HSSFWorkbook workbook = ExcelExportUtil.exportExcel(new ExportParams( | ||||
| @@ -123,9 +123,10 @@ public class ExcelExportUtilTest { | |||||
| * | * | ||||
| * @throws Exception | * @throws Exception | ||||
| */ | */ | ||||
| //@Test | |||||
| @Test | |||||
| public void oneHundredThousandRowTest() throws Exception { | public void oneHundredThousandRowTest() throws Exception { | ||||
| for (int i = 0; i < 250000; i++) { | |||||
| for (int i = 0; i < 250; i++) { | |||||
| list.add(courseEntity); | list.add(courseEntity); | ||||
| } | } | ||||
| Date start = new Date(); | Date start = new Date(); | ||||
| @@ -139,6 +140,14 @@ public class ExcelExportUtilTest { | |||||
| FileOutputStream fos = new FileOutputStream("d:/tt.xls"); | FileOutputStream fos = new FileOutputStream("d:/tt.xls"); | ||||
| workbook.write(fos); | workbook.write(fos); | ||||
| fos.close(); | fos.close(); | ||||
| savefile = new File("d:/1"); | |||||
| if (!savefile.exists()) { | |||||
| savefile.setWritable(true, false); | |||||
| savefile.mkdirs(); | |||||
| } | |||||
| fos = new FileOutputStream("d:/1/tt3.xls"); | |||||
| workbook.write(fos); | |||||
| fos.close(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -0,0 +1,11 @@ | |||||
| log4j.rootLogger=debug,A1,R | |||||
| log4j.appender.A1=org.apache.log4j.ConsoleAppender | |||||
| log4j.appender.A1.Target=System.out | |||||
| log4j.appender.A1.layout=org.apache.log4j.PatternLayout | |||||
| log4j.appender.A1.layout.ConversionPattern=[%c]%m%n | |||||
| log4j.appender.R=org.apache.log4j.RollingFileAppender | |||||
| log4j.appender.R.File=/home/logs/easypoi.info | |||||
| log4j.appender.R.MaxFileSize=10MB | |||||
| log4j.appender.R.layout=org.apache.log4j.PatternLayout | |||||
| log4j.appender.R.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n | |||||
| @@ -11,19 +11,19 @@ | |||||
| <attribute name="maven.pomderived" value="true"/> | <attribute name="maven.pomderived" value="true"/> | ||||
| </attributes> | </attributes> | ||||
| </classpathentry> | </classpathentry> | ||||
| <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"> | |||||
| <classpathentry kind="src" output="target/test-classes" path="src/test/java"> | |||||
| <attributes> | <attributes> | ||||
| <attribute name="optional" value="true"/> | |||||
| <attribute name="maven.pomderived" value="true"/> | <attribute name="maven.pomderived" value="true"/> | ||||
| </attributes> | </attributes> | ||||
| </classpathentry> | </classpathentry> | ||||
| <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> | |||||
| <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"> | |||||
| <attributes> | <attributes> | ||||
| <attribute name="maven.pomderived" value="true"/> | <attribute name="maven.pomderived" value="true"/> | ||||
| </attributes> | </attributes> | ||||
| </classpathentry> | </classpathentry> | ||||
| <classpathentry kind="src" output="target/test-classes" path="src/test/java"> | |||||
| <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> | |||||
| <attributes> | <attributes> | ||||
| <attribute name="optional" value="true"/> | |||||
| <attribute name="maven.pomderived" value="true"/> | <attribute name="maven.pomderived" value="true"/> | ||||
| </attributes> | </attributes> | ||||
| </classpathentry> | </classpathentry> | ||||
| @@ -15,8 +15,14 @@ | |||||
| <arguments> | <arguments> | ||||
| </arguments> | </arguments> | ||||
| </buildCommand> | </buildCommand> | ||||
| <buildCommand> | |||||
| <name>org.springframework.ide.eclipse.core.springbuilder</name> | |||||
| <arguments> | |||||
| </arguments> | |||||
| </buildCommand> | |||||
| </buildSpec> | </buildSpec> | ||||
| <natures> | <natures> | ||||
| <nature>org.springframework.ide.eclipse.core.springnature</nature> | |||||
| <nature>org.eclipse.jdt.core.javanature</nature> | <nature>org.eclipse.jdt.core.javanature</nature> | ||||
| <nature>org.eclipse.m2e.core.maven2Nature</nature> | <nature>org.eclipse.m2e.core.maven2Nature</nature> | ||||
| </natures> | </natures> | ||||
| @@ -4,10 +4,9 @@ | |||||
| <parent> | <parent> | ||||
| <groupId>org.jeecgframework</groupId> | <groupId>org.jeecgframework</groupId> | ||||
| <artifactId>easypoi</artifactId> | <artifactId>easypoi</artifactId> | ||||
| <version>2.0.2</version> | |||||
| <version>2.0.6-SNAPSHOT</version> | |||||
| </parent> | </parent> | ||||
| <artifactId>easypoi-web</artifactId> | <artifactId>easypoi-web</artifactId> | ||||
| <dependencies> | <dependencies> | ||||
| <!--spring --> | <!--spring --> | ||||
| <dependency> | <dependency> | ||||
| @@ -0,0 +1,22 @@ | |||||
| package org.jeecgframework.poi.excel.entity.vo; | |||||
| /** | |||||
| * 正常导出Excel | |||||
| * @Author JueYue on 14-3-8. | |||||
| * 静态常量 | |||||
| */ | |||||
| public interface MapExcelConstants extends BasePOIConstants { | |||||
| /** | |||||
| * 单Sheet导出 | |||||
| */ | |||||
| public final static String JEECG_MAP_EXCEL_VIEW = "jeecgMapExcelView"; | |||||
| /** | |||||
| * Entity List | |||||
| */ | |||||
| public final static String ENTITY_LIST = "data"; | |||||
| /** | |||||
| * 数据列表 | |||||
| */ | |||||
| public final static String MAP_LIST = "mapList"; | |||||
| } | |||||
| @@ -0,0 +1,56 @@ | |||||
| package org.jeecgframework.poi.excel.view; | |||||
| import org.apache.poi.hssf.usermodel.HSSFWorkbook; | |||||
| import org.jeecgframework.poi.excel.entity.ExportParams; | |||||
| import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; | |||||
| import org.jeecgframework.poi.excel.entity.vo.MapExcelConstants; | |||||
| import org.jeecgframework.poi.excel.export.ExcelExportServer; | |||||
| import org.springframework.web.servlet.view.document.AbstractExcelView; | |||||
| import javax.servlet.http.HttpServletRequest; | |||||
| import javax.servlet.http.HttpServletResponse; | |||||
| import java.util.Collection; | |||||
| import java.util.List; | |||||
| import java.util.Map; | |||||
| /** | |||||
| * Map 对象接口 | |||||
| * | |||||
| * @author JueYue | |||||
| * @date 2014年11月25日 下午3:26:32 | |||||
| */ | |||||
| @SuppressWarnings("unchecked") | |||||
| public class JeecgMapExcelView extends AbstractExcelView { | |||||
| @Override | |||||
| protected void buildExcelDocument(Map<String, Object> model, | |||||
| HSSFWorkbook hssfWorkbook, HttpServletRequest httpServletRequest, | |||||
| HttpServletResponse httpServletResponse) throws Exception { | |||||
| String codedFileName = "临时文件.xls"; | |||||
| if (model.containsKey(MapExcelConstants.FILE_NAME)) { | |||||
| codedFileName = (String) model.get(MapExcelConstants.FILE_NAME) | |||||
| + ".xls"; | |||||
| } | |||||
| if (isIE(httpServletRequest)) { | |||||
| codedFileName = java.net.URLEncoder.encode(codedFileName, "UTF8"); | |||||
| } else { | |||||
| codedFileName = new String(codedFileName.getBytes("UTF-8"), | |||||
| "ISO-8859-1"); | |||||
| } | |||||
| httpServletResponse.setHeader("content-disposition", | |||||
| "attachment;filename=" + codedFileName); | |||||
| new ExcelExportServer().createSheetForMap(hssfWorkbook, | |||||
| (ExportParams) model.get(MapExcelConstants.PARAMS), | |||||
| (List<ExcelExportEntity>) model | |||||
| .get(MapExcelConstants.ENTITY_LIST), | |||||
| (Collection<? extends Map<?, ?>>) model | |||||
| .get(MapExcelConstants.MAP_LIST)); | |||||
| } | |||||
| public boolean isIE(HttpServletRequest request) { | |||||
| return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request | |||||
| .getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true | |||||
| : false; | |||||
| } | |||||
| } | |||||
| @@ -28,17 +28,24 @@ public class JeecgSingleExcelView extends AbstractExcelView { | |||||
| codedFileName = (String) model.get(NormalExcelConstants.FILE_NAME) | codedFileName = (String) model.get(NormalExcelConstants.FILE_NAME) | ||||
| + ".xls"; | + ".xls"; | ||||
| } | } | ||||
| if (isIE(httpServletRequest)) { | |||||
| codedFileName = java.net.URLEncoder.encode(codedFileName, "UTF8"); | |||||
| } else { | |||||
| codedFileName = new String(codedFileName.getBytes("UTF-8"), | |||||
| "ISO-8859-1"); | |||||
| } | |||||
| httpServletResponse.setHeader("content-disposition", | httpServletResponse.setHeader("content-disposition", | ||||
| "attachment;filename=" | |||||
| + new String(codedFileName.getBytes(), "iso8859-1")); | |||||
| "attachment;filename="+codedFileName); | |||||
| if (model.containsKey(NormalExcelConstants.MAP_LIST)) { | if (model.containsKey(NormalExcelConstants.MAP_LIST)) { | ||||
| List<Map<String, Object>> list = (List<Map<String, Object>>) model | List<Map<String, Object>> list = (List<Map<String, Object>>) model | ||||
| .get(NormalExcelConstants.MAP_LIST); | .get(NormalExcelConstants.MAP_LIST); | ||||
| for (Map<String, Object> map : list) { | for (Map<String, Object> map : list) { | ||||
| new ExcelExportServer().createSheet(hssfWorkbook, | |||||
| (ExportParams) map.get(NormalExcelConstants.PARAMS), | |||||
| (Class<?>) map.get(NormalExcelConstants.CLASS), | |||||
| (Collection<?>) map.get(NormalExcelConstants.DATA_LIST)); | |||||
| new ExcelExportServer() | |||||
| .createSheet(hssfWorkbook, (ExportParams) map | |||||
| .get(NormalExcelConstants.PARAMS), | |||||
| (Class<?>) map.get(NormalExcelConstants.CLASS), | |||||
| (Collection<?>) map | |||||
| .get(NormalExcelConstants.DATA_LIST)); | |||||
| } | } | ||||
| } else { | } else { | ||||
| new ExcelExportServer().createSheet(hssfWorkbook, | new ExcelExportServer().createSheet(hssfWorkbook, | ||||
| @@ -47,4 +54,10 @@ public class JeecgSingleExcelView extends AbstractExcelView { | |||||
| (Collection<?>) model.get(NormalExcelConstants.DATA_LIST)); | (Collection<?>) model.get(NormalExcelConstants.DATA_LIST)); | ||||
| } | } | ||||
| } | } | ||||
| public boolean isIE(HttpServletRequest request) { | |||||
| return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request | |||||
| .getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true | |||||
| : false; | |||||
| } | |||||
| } | } | ||||
| @@ -38,8 +38,14 @@ public class JeecgTemplateExcelView extends AbstractView { | |||||
| codedFileName = (String) model.get(NormalExcelConstants.FILE_NAME) | codedFileName = (String) model.get(NormalExcelConstants.FILE_NAME) | ||||
| + ".xls"; | + ".xls"; | ||||
| } | } | ||||
| response.setHeader("content-disposition", "attachment;filename=" | |||||
| + new String(codedFileName.getBytes(), "iso8859-1")); | |||||
| if (isIE(request)) { | |||||
| codedFileName = java.net.URLEncoder.encode(codedFileName, "UTF8"); | |||||
| } else { | |||||
| codedFileName = new String(codedFileName.getBytes("UTF-8"), | |||||
| "ISO-8859-1"); | |||||
| } | |||||
| response.setHeader("content-disposition", | |||||
| "attachment;filename="+codedFileName); | |||||
| Workbook workbook = ExcelExportUtil.exportExcel( | Workbook workbook = ExcelExportUtil.exportExcel( | ||||
| (TemplateExportParams)model.get(TemplateExcelConstants.PARAMS), | (TemplateExportParams)model.get(TemplateExcelConstants.PARAMS), | ||||
| (Class<?>) model.get(TemplateExcelConstants.CLASS), | (Class<?>) model.get(TemplateExcelConstants.CLASS), | ||||
| @@ -49,4 +55,10 @@ public class JeecgTemplateExcelView extends AbstractView { | |||||
| workbook.write(out); | workbook.write(out); | ||||
| out.flush(); | out.flush(); | ||||
| } | } | ||||
| public boolean isIE(HttpServletRequest request) { | |||||
| return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request | |||||
| .getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true | |||||
| : false; | |||||
| } | |||||
| } | } | ||||
| @@ -35,12 +35,26 @@ public class JeecgTemplateWordView extends AbstractView { | |||||
| codedFileName = (String) model.get(TemplateWordConstants.FILE_NAME) | codedFileName = (String) model.get(TemplateWordConstants.FILE_NAME) | ||||
| + ".docx"; | + ".docx"; | ||||
| } | } | ||||
| if (isIE(request)) { | |||||
| codedFileName = java.net.URLEncoder.encode(codedFileName, "UTF8"); | |||||
| } else { | |||||
| codedFileName = new String(codedFileName.getBytes("UTF-8"), | |||||
| "ISO-8859-1"); | |||||
| } | |||||
| response.setHeader("content-disposition", "attachment;filename=" | response.setHeader("content-disposition", "attachment;filename=" | ||||
| + new String(codedFileName.getBytes(), "iso8859-1")); | |||||
| XWPFDocument document = WordExportUtil.exportWord07((String)model.get(TemplateWordConstants.URL), | |||||
| (Map<String, Object>)model.get(TemplateWordConstants.MAP_DATA)); | |||||
| + codedFileName); | |||||
| XWPFDocument document = WordExportUtil | |||||
| .exportWord07((String) model.get(TemplateWordConstants.URL), | |||||
| (Map<String, Object>) model | |||||
| .get(TemplateWordConstants.MAP_DATA)); | |||||
| ServletOutputStream out = response.getOutputStream(); | ServletOutputStream out = response.getOutputStream(); | ||||
| document.write(out); | document.write(out); | ||||
| out.flush(); | out.flush(); | ||||
| } | } | ||||
| public boolean isIE(HttpServletRequest request) { | |||||
| return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request | |||||
| .getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true | |||||
| : false; | |||||
| } | |||||
| } | } | ||||
| @@ -1 +1 @@ | |||||
| cmd /k mvn package | |||||
| cmd /k mvn package -DskipTest | |||||
| @@ -3,7 +3,7 @@ | |||||
| <modelVersion>4.0.0</modelVersion> | <modelVersion>4.0.0</modelVersion> | ||||
| <groupId>org.jeecgframework</groupId> | <groupId>org.jeecgframework</groupId> | ||||
| <artifactId>easypoi</artifactId> | <artifactId>easypoi</artifactId> | ||||
| <version>2.0.2</version> | |||||
| <version>2.0.6-SNAPSHOT</version> | |||||
| <packaging>pom</packaging> | <packaging>pom</packaging> | ||||
| <name>easypoi</name> | <name>easypoi</name> | ||||
| <modules> | <modules> | ||||
| @@ -11,18 +11,19 @@ | |||||
| <module>easypoi-web</module> | <module>easypoi-web</module> | ||||
| <module>easypoi-test</module> | <module>easypoi-test</module> | ||||
| </modules> | </modules> | ||||
| <url>www.jeecg.org</url> | <url>www.jeecg.org</url> | ||||
| <description> office 工具类 基于 poi</description> | <description> office 工具类 基于 poi</description> | ||||
| <developers> | <developers> | ||||
| <developer> | <developer> | ||||
| <name>JueYue</name> | <name>JueYue</name> | ||||
| <email>qrb.jueyue@gmail.com</email> | <email>qrb.jueyue@gmail.com</email> | ||||
| </developer> | </developer> | ||||
| </developers> | </developers> | ||||
| <properties> | <properties> | ||||
| <sub.version>2.0.6-SNAPSHOT</sub.version> | |||||
| <poi-ooxml-schemas.version>3.9</poi-ooxml-schemas.version> | <poi-ooxml-schemas.version>3.9</poi-ooxml-schemas.version> | ||||
| <poi-ooxml.version>3.9</poi-ooxml.version> | <poi-ooxml.version>3.9</poi-ooxml.version> | ||||
| <poi-scratchpad.version>3.9</poi-scratchpad.version> | <poi-scratchpad.version>3.9</poi-scratchpad.version> | ||||
| @@ -109,7 +110,7 @@ | |||||
| <version>2.5</version> | <version>2.5</version> | ||||
| <scope>provided</scope> | <scope>provided</scope> | ||||
| </dependency> | </dependency> | ||||
| <!-- test --> | <!-- test --> | ||||
| <dependency> | <dependency> | ||||
| <groupId>junit</groupId> | <groupId>junit</groupId> | ||||
| @@ -117,16 +118,17 @@ | |||||
| <version>${junit.version}</version> | <version>${junit.version}</version> | ||||
| <scope>test</scope> | <scope>test</scope> | ||||
| </dependency> | </dependency> | ||||
| <!-- 模块版本 --> | <!-- 模块版本 --> | ||||
| <dependency> | <dependency> | ||||
| <groupId>org.jeecgframework</groupId> | <groupId>org.jeecgframework</groupId> | ||||
| <artifactId>easypoi-base</artifactId> | <artifactId>easypoi-base</artifactId> | ||||
| <version>2.0.2</version> | |||||
| <version>${sub.version}</version> | |||||
| </dependency> | </dependency> | ||||
| </dependencies> | </dependencies> | ||||
| </dependencyManagement> | </dependencyManagement> | ||||
| <!-- 内部 maven 地址 --> | |||||
| <distributionManagement> | <distributionManagement> | ||||
| <repository> | <repository> | ||||
| <id>postaop-pay-platform-release</id> | <id>postaop-pay-platform-release</id> | ||||
| @@ -134,10 +136,15 @@ | |||||
| </repository> | </repository> | ||||
| <snapshotRepository> | <snapshotRepository> | ||||
| <id>postaop-pay-platform-snapshot</id> | <id>postaop-pay-platform-snapshot</id> | ||||
| <url>http://192.168.0.99:8081/nexus/content/repositoriespostaop-common-snapshot/</url> | |||||
| <url>http://192.168.0.99:8081/nexus/content/repositories/postaop-common-snapshot/</url> | |||||
| </snapshotRepository> | </snapshotRepository> | ||||
| </distributionManagement> | </distributionManagement> | ||||
| <scm> | |||||
| <connection>scm:svn:https://192.168.0.99:8443/svn/postaop-platform/qdcrm/trunk/</connection> | |||||
| <developerConnection>scm:svn:https://192.168.0.99:8443/svn/postaop-platform/qdcrm/trunk/</developerConnection> | |||||
| </scm> | |||||
| <build> | <build> | ||||
| <plugins> | <plugins> | ||||
| <plugin> | <plugin> | ||||