@@ -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> | ||||