@@ -10,6 +10,7 @@ import org.apache.poi.xssf.streaming.SXSSFWorkbook; | |||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook; | import org.apache.poi.xssf.usermodel.XSSFWorkbook; | ||||
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.enmus.ExcelType; | |||||
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.entity.vo.PoiBaseConstants; | ||||
import org.jeecgframework.poi.excel.export.ExcelExportServer; | import org.jeecgframework.poi.excel.export.ExcelExportServer; | ||||
@@ -35,14 +36,14 @@ public final class ExcelExportUtil { | |||||
public static Workbook exportExcel(ExportParams entity, Class<?> pojoClass, | public static Workbook exportExcel(ExportParams entity, Class<?> pojoClass, | ||||
Collection<?> dataSet) { | Collection<?> dataSet) { | ||||
Workbook workbook; | Workbook workbook; | ||||
if (entity.getType().equals(PoiBaseConstants.HSSF)) { | |||||
if (entity.getType().equals(ExcelType.HSSF)) { | |||||
workbook = new HSSFWorkbook(); | workbook = new HSSFWorkbook(); | ||||
} else if (dataSet.size() < 1000) { | } else if (dataSet.size() < 1000) { | ||||
workbook = new XSSFWorkbook(); | workbook = new XSSFWorkbook(); | ||||
} else { | } else { | ||||
workbook = new SXSSFWorkbook(); | workbook = new SXSSFWorkbook(); | ||||
} | } | ||||
new ExcelExportServer().createSheet(workbook, entity, pojoClass, dataSet, entity.getType()); | |||||
new ExcelExportServer().createSheet(workbook, entity, pojoClass, dataSet); | |||||
return workbook; | return workbook; | ||||
} | } | ||||
@@ -58,15 +59,14 @@ public final class ExcelExportUtil { | |||||
public static Workbook exportExcel(ExportParams entity, List<ExcelExportEntity> entityList, | public static Workbook exportExcel(ExportParams entity, List<ExcelExportEntity> entityList, | ||||
Collection<? extends Map<?, ?>> dataSet) { | Collection<? extends Map<?, ?>> dataSet) { | ||||
Workbook workbook; | Workbook workbook; | ||||
if (entity.getType().equals(PoiBaseConstants.HSSF)) { | |||||
if (entity.getType().equals(ExcelType.HSSF)) { | |||||
workbook = new HSSFWorkbook(); | workbook = new HSSFWorkbook(); | ||||
} else if (dataSet.size() < 1000) { | } else if (dataSet.size() < 1000) { | ||||
workbook = new XSSFWorkbook(); | workbook = new XSSFWorkbook(); | ||||
} else { | } else { | ||||
workbook = new SXSSFWorkbook(); | workbook = new SXSSFWorkbook(); | ||||
} | } | ||||
new ExcelExportServer().createSheetForMap(workbook, entity, entityList, dataSet, | |||||
entity.getType()); | |||||
new ExcelExportServer().createSheetForMap(workbook, entity, entityList, dataSet); | |||||
return workbook; | return workbook; | ||||
} | } | ||||
@@ -80,7 +80,7 @@ public final class ExcelExportUtil { | |||||
*/ | */ | ||||
public static Workbook exportExcel(List<Map<String, Object>> list, String type) { | public static Workbook exportExcel(List<Map<String, Object>> list, String type) { | ||||
Workbook workbook; | Workbook workbook; | ||||
if (type.equals(PoiBaseConstants.HSSF)) { | |||||
if (type.equals(ExcelType.HSSF)) { | |||||
workbook = new HSSFWorkbook(); | workbook = new HSSFWorkbook(); | ||||
} else { | } else { | ||||
workbook = new XSSFWorkbook(); | workbook = new XSSFWorkbook(); | ||||
@@ -88,7 +88,7 @@ public final class ExcelExportUtil { | |||||
ExcelExportServer server = new ExcelExportServer(); | ExcelExportServer server = new ExcelExportServer(); | ||||
for (Map<String, Object> map : list) { | for (Map<String, Object> map : list) { | ||||
server.createSheet(workbook, (ExportParams) map.get("title"), | server.createSheet(workbook, (ExportParams) map.get("title"), | ||||
(Class<?>) map.get("entity"), (Collection<?>) map.get("data"), type); | |||||
(Class<?>) map.get("entity"), (Collection<?>) map.get("data")); | |||||
} | } | ||||
return workbook; | return workbook; | ||||
} | } | ||||
@@ -9,14 +9,6 @@ import org.jeecgframework.poi.handler.inter.IExcelDataHandler; | |||||
*/ | */ | ||||
public class ExcelBaseParams { | public class ExcelBaseParams { | ||||
/** | |||||
* 03版本Excel | |||||
*/ | |||||
public static final String HSSF = "HSSF"; | |||||
/** | |||||
* 07版本Excel | |||||
*/ | |||||
public static final String XSSF = "XSSF"; | |||||
/** | /** | ||||
* 数据处理接口,以此为主,replace,format都在这后面 | * 数据处理接口,以此为主,replace,format都在这后面 | ||||
*/ | */ | ||||
@@ -1,7 +1,7 @@ | |||||
package org.jeecgframework.poi.excel.entity; | package org.jeecgframework.poi.excel.entity; | ||||
import org.apache.poi.hssf.util.HSSFColor; | import org.apache.poi.hssf.util.HSSFColor; | ||||
import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants; | |||||
import org.jeecgframework.poi.excel.entity.enmus.ExcelType; | |||||
/** | /** | ||||
* Excel 导出参数 | * Excel 导出参数 | ||||
@@ -14,46 +14,50 @@ public class ExportParams extends ExcelBaseParams { | |||||
/** | /** | ||||
* 表格名称 | * 表格名称 | ||||
*/ | */ | ||||
private String title; | |||||
private String title; | |||||
/** | /** | ||||
* 表格名称 | * 表格名称 | ||||
*/ | */ | ||||
private short titleHeight = 20; | |||||
private short titleHeight = 20; | |||||
/** | /** | ||||
* 第二行名称 | * 第二行名称 | ||||
*/ | */ | ||||
private String secondTitle; | |||||
private String secondTitle; | |||||
/** | /** | ||||
* 表格名称 | * 表格名称 | ||||
*/ | */ | ||||
private short secondTitleHeight = 8; | |||||
private short secondTitleHeight = 8; | |||||
/** | /** | ||||
* sheetName | * sheetName | ||||
*/ | */ | ||||
private String sheetName; | |||||
private String sheetName; | |||||
/** | /** | ||||
* 过滤的属性 | * 过滤的属性 | ||||
*/ | */ | ||||
private String[] exclusions; | |||||
private String[] exclusions; | |||||
/** | /** | ||||
* 是否添加需要需要 | * 是否添加需要需要 | ||||
*/ | */ | ||||
private boolean addIndex; | |||||
private boolean addIndex; | |||||
/** | |||||
* 是否添加需要需要 | |||||
*/ | |||||
private String indexName = "序号"; | |||||
/** | /** | ||||
* 表头颜色 | * 表头颜色 | ||||
*/ | */ | ||||
private short color = HSSFColor.WHITE.index; | |||||
private short color = HSSFColor.WHITE.index; | |||||
/** | /** | ||||
* 属性说明行的颜色 例如:HSSFColor.SKY_BLUE.index 默认 | * 属性说明行的颜色 例如:HSSFColor.SKY_BLUE.index 默认 | ||||
*/ | */ | ||||
private short headerColor = HSSFColor.SKY_BLUE.index; | |||||
private short headerColor = HSSFColor.SKY_BLUE.index; | |||||
/** | /** | ||||
* Excel 导出版本 | * Excel 导出版本 | ||||
*/ | */ | ||||
private String type = PoiBaseConstants.HSSF; | |||||
private ExcelType type = ExcelType.HSSF; | |||||
public ExportParams() { | public ExportParams() { | ||||
@@ -64,6 +68,12 @@ public class ExportParams extends ExcelBaseParams { | |||||
this.sheetName = sheetName; | this.sheetName = sheetName; | ||||
} | } | ||||
public ExportParams(String title, String sheetName, ExcelType type) { | |||||
this.title = title; | |||||
this.sheetName = sheetName; | |||||
this.type = type; | |||||
} | |||||
public ExportParams(String title, String secondTitle, String sheetName) { | public ExportParams(String title, String secondTitle, String sheetName) { | ||||
this.title = title; | this.title = title; | ||||
this.secondTitle = secondTitle; | this.secondTitle = secondTitle; | ||||
@@ -142,11 +152,20 @@ public class ExportParams extends ExcelBaseParams { | |||||
this.titleHeight = titleHeight; | this.titleHeight = titleHeight; | ||||
} | } | ||||
public String getType() { | |||||
public ExcelType getType() { | |||||
return type; | return type; | ||||
} | } | ||||
public void setType(String type) { | |||||
public void setType(ExcelType type) { | |||||
this.type = type; | this.type = type; | ||||
} | } | ||||
public String getIndexName() { | |||||
return indexName; | |||||
} | |||||
public void setIndexName(String indexName) { | |||||
this.indexName = indexName; | |||||
} | |||||
} | } |
@@ -0,0 +1,12 @@ | |||||
package org.jeecgframework.poi.excel.entity.enmus; | |||||
/** | |||||
* Cell 值得类型 | |||||
* @author JueYue | |||||
* @date 2014年12月29日 下午10:20:49 | |||||
*/ | |||||
public enum CellValueType { | |||||
String, Number, Boolean, Date, TElement, Null, None; | |||||
} |
@@ -0,0 +1,12 @@ | |||||
package org.jeecgframework.poi.excel.entity.enmus; | |||||
/** | |||||
* Excel Type | |||||
* @author JueYue | |||||
* @date 2014年12月29日 下午9:08:21 | |||||
*/ | |||||
public enum ExcelType { | |||||
HSSF, XSSF; | |||||
} |
@@ -0,0 +1,41 @@ | |||||
package org.jeecgframework.poi.excel.entity.sax; | |||||
import org.jeecgframework.poi.excel.entity.enmus.CellValueType; | |||||
/** | |||||
* Cell 对象 | |||||
* @author JueYue | |||||
* @date 2014年12月29日 下午10:12:57 | |||||
*/ | |||||
public class SaxReadCellEntity { | |||||
/** | |||||
* 值类型 | |||||
*/ | |||||
private CellValueType cellType; | |||||
/** | |||||
* 值 | |||||
*/ | |||||
private Object value; | |||||
public SaxReadCellEntity(CellValueType cellType, Object value) { | |||||
this.cellType = cellType; | |||||
this.value = value; | |||||
} | |||||
public CellValueType getCellType() { | |||||
return cellType; | |||||
} | |||||
public void setCellType(CellValueType cellType) { | |||||
this.cellType = cellType; | |||||
} | |||||
public Object getValue() { | |||||
return value; | |||||
} | |||||
public void setValue(Object value) { | |||||
this.value = value; | |||||
} | |||||
} |
@@ -21,13 +21,5 @@ public interface PoiBaseConstants { | |||||
* 是否增加属性列 | * 是否增加属性列 | ||||
*/ | */ | ||||
public static String IS_ADD_INDEX = "isAddIndex"; | public static String IS_ADD_INDEX = "isAddIndex"; | ||||
/** | |||||
* 03版本Excel | |||||
*/ | |||||
public static String HSSF = "HSSF"; | |||||
/** | |||||
* 07版本Excel | |||||
*/ | |||||
public static String XSSF = "XSSF"; | |||||
} | } |
@@ -19,6 +19,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.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.enmus.ExcelType; | |||||
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.entity.vo.PoiBaseConstants; | ||||
import org.jeecgframework.poi.excel.export.base.ExcelExportBase; | import org.jeecgframework.poi.excel.export.base.ExcelExportBase; | ||||
@@ -80,18 +81,19 @@ public class ExcelExportServer extends ExcelExportBase { | |||||
} | } | ||||
public void createSheet(Workbook workbook, ExportParams entity, Class<?> pojoClass, | public void createSheet(Workbook workbook, ExportParams entity, Class<?> pojoClass, | ||||
Collection<?> dataSet, String type) { | |||||
Collection<?> dataSet) { | |||||
if (logger.isDebugEnabled()) { | if (logger.isDebugEnabled()) { | ||||
logger.debug("Excel export start ,class is {}", pojoClass); | logger.debug("Excel export start ,class is {}", pojoClass); | ||||
logger.debug("Excel version is {}", type.equals(PoiBaseConstants.HSSF) ? "03" : "07"); | |||||
logger.debug("Excel version is {}", entity.getType().equals(ExcelType.HSSF) ? "03" | |||||
: "07"); | |||||
} | } | ||||
if (workbook == null || entity == null || pojoClass == null || dataSet == null) { | if (workbook == null || entity == null || pojoClass == null || dataSet == null) { | ||||
throw new ExcelExportException(ExcelExportEnum.PARAMETER_ERROR); | throw new ExcelExportException(ExcelExportEnum.PARAMETER_ERROR); | ||||
} | } | ||||
if (type.equals(PoiBaseConstants.XSSF)) { | |||||
super.type = entity.getType(); | |||||
if (type.equals(ExcelType.XSSF)) { | |||||
MAX_NUM = 1000000; | MAX_NUM = 1000000; | ||||
} | } | ||||
super.type = type; | |||||
Sheet sheet = null; | Sheet sheet = null; | ||||
try { | try { | ||||
sheet = workbook.createSheet(entity.getSheetName()); | sheet = workbook.createSheet(entity.getSheetName()); | ||||
@@ -109,7 +111,7 @@ public class ExcelExportServer extends ExcelExportBase { | |||||
Drawing patriarch = sheet.createDrawingPatriarch(); | Drawing patriarch = sheet.createDrawingPatriarch(); | ||||
List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>(); | List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>(); | ||||
if (entity.isAddIndex()) { | if (entity.isAddIndex()) { | ||||
excelParams.add(indexExcelEntity()); | |||||
excelParams.add(indexExcelEntity(entity)); | |||||
} | } | ||||
// 得到所有字段 | // 得到所有字段 | ||||
Field fileds[] = POIPublicUtil.getClassFields(pojoClass); | Field fileds[] = POIPublicUtil.getClassFields(pojoClass); | ||||
@@ -140,11 +142,11 @@ public class ExcelExportServer extends ExcelExportBase { | |||||
its.remove(); | its.remove(); | ||||
} | } | ||||
// 创建合计信息 | // 创建合计信息 | ||||
addStatisticsRow(styles.get("one"),sheet); | |||||
addStatisticsRow(styles.get("one"), sheet); | |||||
// 发现还有剩余list 继续循环创建Sheet | // 发现还有剩余list 继续循环创建Sheet | ||||
if (dataSet.size() > 0) { | if (dataSet.size() > 0) { | ||||
createSheet(workbook, entity, pojoClass, dataSet, type); | |||||
createSheet(workbook, entity, pojoClass, dataSet); | |||||
} | } | ||||
} catch (Exception e) { | } catch (Exception e) { | ||||
@@ -156,17 +158,18 @@ public class ExcelExportServer extends ExcelExportBase { | |||||
public void createSheetForMap(Workbook workbook, ExportParams entity, | public void createSheetForMap(Workbook workbook, ExportParams entity, | ||||
List<ExcelExportEntity> entityList, | List<ExcelExportEntity> entityList, | ||||
Collection<? extends Map<?, ?>> dataSet, String type) { | |||||
Collection<? extends Map<?, ?>> dataSet) { | |||||
if (logger.isDebugEnabled()) { | if (logger.isDebugEnabled()) { | ||||
logger.debug("Excel version is {}", type.equals(PoiBaseConstants.HSSF) ? "03" : "07"); | |||||
logger.debug("Excel version is {}", entity.getType().equals(ExcelType.HSSF) ? "03" | |||||
: "07"); | |||||
} | } | ||||
if (workbook == null || entity == null || entityList == null || dataSet == null) { | if (workbook == null || entity == null || entityList == null || dataSet == null) { | ||||
throw new ExcelExportException(ExcelExportEnum.PARAMETER_ERROR); | throw new ExcelExportException(ExcelExportEnum.PARAMETER_ERROR); | ||||
} | } | ||||
if (type.equals(PoiBaseConstants.XSSF)) { | |||||
super.type = entity.getType(); | |||||
if (type.equals(ExcelType.XSSF)) { | |||||
MAX_NUM = 1000000; | MAX_NUM = 1000000; | ||||
} | } | ||||
super.type = type; | |||||
Sheet sheet = null; | Sheet sheet = null; | ||||
try { | try { | ||||
sheet = workbook.createSheet(entity.getSheetName()); | sheet = workbook.createSheet(entity.getSheetName()); | ||||
@@ -184,7 +187,7 @@ public class ExcelExportServer extends ExcelExportBase { | |||||
Drawing patriarch = sheet.createDrawingPatriarch(); | Drawing patriarch = sheet.createDrawingPatriarch(); | ||||
List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>(); | List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>(); | ||||
if (entity.isAddIndex()) { | if (entity.isAddIndex()) { | ||||
excelParams.add(indexExcelEntity()); | |||||
excelParams.add(indexExcelEntity(entity)); | |||||
} | } | ||||
excelParams.addAll(entityList); | excelParams.addAll(entityList); | ||||
sortAllParams(excelParams); | sortAllParams(excelParams); | ||||
@@ -212,7 +215,7 @@ public class ExcelExportServer extends ExcelExportBase { | |||||
} | } | ||||
// 发现还有剩余list 继续循环创建Sheet | // 发现还有剩余list 继续循环创建Sheet | ||||
if (dataSet.size() > 0) { | if (dataSet.size() > 0) { | ||||
createSheetForMap(workbook, entity, entityList, dataSet, type); | |||||
createSheetForMap(workbook, entity, entityList, dataSet); | |||||
} | } | ||||
} catch (Exception e) { | } catch (Exception e) { | ||||
@@ -364,13 +367,13 @@ public class ExcelExportServer extends ExcelExportBase { | |||||
return style; | return style; | ||||
} | } | ||||
private ExcelExportEntity indexExcelEntity() { | |||||
ExcelExportEntity entity = new ExcelExportEntity(); | |||||
entity.setOrderNum(0); | |||||
entity.setName("序号"); | |||||
entity.setWidth(10); | |||||
entity.setFormat(PoiBaseConstants.IS_ADD_INDEX); | |||||
return entity; | |||||
private ExcelExportEntity indexExcelEntity(ExportParams entity) { | |||||
ExcelExportEntity exportEntity = new ExcelExportEntity(); | |||||
exportEntity.setOrderNum(0); | |||||
exportEntity.setName(entity.getIndexName()); | |||||
exportEntity.setWidth(10); | |||||
exportEntity.setFormat(PoiBaseConstants.IS_ADD_INDEX); | |||||
return exportEntity; | |||||
} | } | ||||
} | } |
@@ -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.apache.poi.xssf.usermodel.XSSFClientAnchor; | import org.apache.poi.xssf.usermodel.XSSFClientAnchor; | ||||
import org.apache.poi.xssf.usermodel.XSSFRichTextString; | import org.apache.poi.xssf.usermodel.XSSFRichTextString; | ||||
import org.jeecgframework.poi.excel.entity.enmus.ExcelType; | |||||
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.excel.entity.vo.PoiBaseConstants; | ||||
@@ -43,7 +44,7 @@ public abstract class ExcelExportBase extends ExportBase { | |||||
private int currentIndex = 0; | private int currentIndex = 0; | ||||
protected String type = PoiBaseConstants.HSSF; | |||||
protected ExcelType type = ExcelType.HSSF; | |||||
private Map<Integer, Double> statistics = new HashMap<Integer, Double>(); | private Map<Integer, Double> statistics = new HashMap<Integer, Double>(); | ||||
@@ -150,7 +151,7 @@ public abstract class ExcelExportBase extends ExportBase { | |||||
row.setHeight((short) (50 * entity.getHeight())); | row.setHeight((short) (50 * entity.getHeight())); | ||||
row.createCell(i); | row.createCell(i); | ||||
ClientAnchor anchor; | ClientAnchor anchor; | ||||
if (type.equals(PoiBaseConstants.HSSF)) { | |||||
if (type.equals(ExcelType.HSSF)) { | |||||
anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) i, row.getRowNum(), (short) (i + 1), | anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) i, row.getRowNum(), (short) (i + 1), | ||||
row.getRowNum() + 1); | row.getRowNum() + 1); | ||||
} else { | } else { | ||||
@@ -255,7 +256,7 @@ public abstract class ExcelExportBase extends ExportBase { | |||||
ExcelExportEntity entity) { | ExcelExportEntity entity) { | ||||
Cell cell = row.createCell(index); | Cell cell = row.createCell(index); | ||||
RichTextString Rtext; | RichTextString Rtext; | ||||
if (type.equals(PoiBaseConstants.HSSF)) { | |||||
if (type.equals(ExcelType.HSSF)) { | |||||
Rtext = new HSSFRichTextString(text); | Rtext = new HSSFRichTextString(text); | ||||
} else { | } else { | ||||
Rtext = new XSSFRichTextString(text); | Rtext = new XSSFRichTextString(text); | ||||
@@ -18,8 +18,8 @@ import org.apache.poi.ss.usermodel.Workbook; | |||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook; | import org.apache.poi.xssf.usermodel.XSSFWorkbook; | ||||
import org.jeecgframework.poi.cache.ExcelCache; | import org.jeecgframework.poi.cache.ExcelCache; | ||||
import org.jeecgframework.poi.excel.annotation.ExcelTarget; | import org.jeecgframework.poi.excel.annotation.ExcelTarget; | ||||
import org.jeecgframework.poi.excel.entity.ExcelBaseParams; | |||||
import org.jeecgframework.poi.excel.entity.TemplateExportParams; | import org.jeecgframework.poi.excel.entity.TemplateExportParams; | ||||
import org.jeecgframework.poi.excel.entity.enmus.ExcelType; | |||||
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; | import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; | ||||
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; | ||||
@@ -52,7 +52,7 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase { | |||||
throws Exception { | throws Exception { | ||||
if (workbook instanceof XSSFWorkbook) { | if (workbook instanceof XSSFWorkbook) { | ||||
super.type = ExcelBaseParams.XSSF; | |||||
super.type = ExcelType.XSSF; | |||||
} | } | ||||
// 获取表头数据 | // 获取表头数据 | ||||
Map<String, Integer> titlemap = getTitleMap(params, sheet); | Map<String, Integer> titlemap = getTitleMap(params, sheet); | ||||
@@ -0,0 +1,61 @@ | |||||
package org.jeecgframework.poi.excel.imports.sax; | |||||
import java.io.IOException; | |||||
import java.io.InputStream; | |||||
import java.util.Iterator; | |||||
import java.util.List; | |||||
import org.apache.poi.openxml4j.exceptions.InvalidFormatException; | |||||
import org.apache.poi.openxml4j.exceptions.OpenXML4JException; | |||||
import org.apache.poi.openxml4j.opc.OPCPackage; | |||||
import org.apache.poi.xssf.eventusermodel.XSSFReader; | |||||
import org.apache.poi.xssf.model.SharedStringsTable; | |||||
import org.jeecgframework.poi.excel.entity.ImportParams; | |||||
import org.jeecgframework.poi.excel.imports.sax.parse.ISaxRowRead; | |||||
import org.jeecgframework.poi.excel.imports.sax.parse.SaxRowRead; | |||||
import org.xml.sax.ContentHandler; | |||||
import org.xml.sax.InputSource; | |||||
import org.xml.sax.SAXException; | |||||
import org.xml.sax.XMLReader; | |||||
import org.xml.sax.helpers.XMLReaderFactory; | |||||
/** | |||||
* 基于SAX Excel大数据读取,读取Excel 07版本,不支持图片读取 | |||||
* @author JueYue | |||||
* @date 2014年12月29日 下午9:41:38 | |||||
* @version 1.0 | |||||
*/ | |||||
public class SaxReadExcel { | |||||
public <T> List<T> readExcel(InputStream inputstream, Class<?> pojoClass, ImportParams params) { | |||||
try { | |||||
OPCPackage opcPackage = OPCPackage.open(inputstream); | |||||
XSSFReader xssfReader = new XSSFReader(opcPackage); | |||||
SharedStringsTable sst = xssfReader.getSharedStringsTable(); | |||||
ISaxRowRead rowRead = new SaxRowRead(); | |||||
XMLReader parser = fetchSheetParser(sst, rowRead); | |||||
Iterator<InputStream> sheets = xssfReader.getSheetsData(); | |||||
int sheetIndex = 0; | |||||
while (sheets.hasNext() && sheetIndex < params.getSheetNum()) { | |||||
sheetIndex++; | |||||
InputStream sheet = sheets.next(); | |||||
InputSource sheetSource = new InputSource(sheet); | |||||
parser.parse(sheetSource); | |||||
sheet.close(); | |||||
} | |||||
return rowRead.getList(); | |||||
} catch (Exception e) { | |||||
} | |||||
return null; | |||||
} | |||||
public XMLReader fetchSheetParser(SharedStringsTable sst, ISaxRowRead rowRead) | |||||
throws SAXException { | |||||
XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser"); | |||||
ContentHandler handler = new SheetHandler(sst, rowRead); | |||||
parser.setContentHandler(handler); | |||||
return parser; | |||||
} | |||||
} |
@@ -0,0 +1,122 @@ | |||||
package org.jeecgframework.poi.excel.imports.sax; | |||||
import java.math.BigDecimal; | |||||
import java.util.Date; | |||||
import java.util.List; | |||||
import org.apache.poi.hssf.usermodel.HSSFDateUtil; | |||||
import org.apache.poi.xssf.model.SharedStringsTable; | |||||
import org.apache.poi.xssf.usermodel.XSSFRichTextString; | |||||
import org.jeecgframework.poi.excel.entity.enmus.CellValueType; | |||||
import org.jeecgframework.poi.excel.entity.sax.SaxReadCellEntity; | |||||
import org.jeecgframework.poi.excel.imports.sax.parse.ISaxRowRead; | |||||
import org.xml.sax.Attributes; | |||||
import org.xml.sax.SAXException; | |||||
import org.xml.sax.helpers.DefaultHandler; | |||||
import com.google.common.collect.Lists; | |||||
/** | |||||
* 回调接口 | |||||
* @author JueYue | |||||
* @date 2014年12月29日 下午9:50:09 | |||||
*/ | |||||
public class SheetHandler extends DefaultHandler { | |||||
private SharedStringsTable sst; | |||||
private String lastContents; | |||||
//当前行 | |||||
private int curRow = 0; | |||||
//当前列 | |||||
private int curCol = 0; | |||||
private CellValueType type; | |||||
private ISaxRowRead read; | |||||
//存储行记录的容器 | |||||
private List<SaxReadCellEntity> rowlist = Lists.newArrayList(); | |||||
public SheetHandler(SharedStringsTable sst, ISaxRowRead rowRead) { | |||||
this.sst = sst; | |||||
this.read = rowRead; | |||||
} | |||||
@Override | |||||
public void startElement(String uri, String localName, String name, Attributes attributes) | |||||
throws SAXException { | |||||
// 置空 | |||||
lastContents = ""; | |||||
// c => 单元格 | |||||
if ("c".equals(name)) { | |||||
// 如果下一个元素是 SST 的索引,则将nextIsString标记为true | |||||
String cellType = attributes.getValue("t"); | |||||
if ("s".equals(cellType)) { | |||||
type = CellValueType.String; | |||||
return; | |||||
} | |||||
//日期格式 | |||||
cellType = attributes.getValue("s"); | |||||
if ("1".equals(cellType)) { | |||||
type = CellValueType.Date; | |||||
} else if ("2".equals(cellType)) { | |||||
type = CellValueType.Number; | |||||
} | |||||
} else if ("t".equals(name)) {//当元素为t时 | |||||
type = CellValueType.TElement; | |||||
} | |||||
} | |||||
@Override | |||||
public void endElement(String uri, String localName, String name) throws SAXException { | |||||
// 根据SST的索引值的到单元格的真正要存储的字符串 | |||||
// 这时characters()方法可能会被调用多次 | |||||
if (CellValueType.String.equals(type)) { | |||||
try { | |||||
int idx = Integer.parseInt(lastContents); | |||||
lastContents = new XSSFRichTextString(sst.getEntryAt(idx)).toString(); | |||||
} catch (Exception e) { | |||||
} | |||||
} | |||||
//t元素也包含字符串 | |||||
if (CellValueType.TElement.equals(type)) { | |||||
String value = lastContents.trim(); | |||||
rowlist.add(curCol, new SaxReadCellEntity(CellValueType.String, value)); | |||||
curCol++; | |||||
type = CellValueType.None; | |||||
// v => 单元格的值,如果单元格是字符串则v标签的值为该字符串在SST中的索引 | |||||
// 将单元格内容加入rowlist中,在这之前先去掉字符串前后的空白符 | |||||
} else if ("v".equals(name)) { | |||||
String value = lastContents.trim(); | |||||
value = value.equals("") ? " " : value; | |||||
if (CellValueType.Date.equals(type)) { | |||||
Date date = HSSFDateUtil.getJavaDate(Double.valueOf(value)); | |||||
rowlist.add(curCol, new SaxReadCellEntity(CellValueType.Date, date)); | |||||
} else if (CellValueType.Number.equals(type)) { | |||||
BigDecimal bd = new BigDecimal(value); | |||||
rowlist.add(curCol, new SaxReadCellEntity(CellValueType.Number, bd)); | |||||
} | |||||
curCol++; | |||||
} else { | |||||
//如果标签名称为 row ,这说明已到行尾,调用 optRows() 方法 | |||||
if (name.equals("row")) { | |||||
read.parse(curRow, rowlist); | |||||
rowlist.clear(); | |||||
curRow++; | |||||
curCol = 0; | |||||
} | |||||
} | |||||
} | |||||
@Override | |||||
public void characters(char[] ch, int start, int length) throws SAXException { | |||||
//得到单元格内容的值 | |||||
lastContents += new String(ch, start, length); | |||||
} | |||||
} |
@@ -0,0 +1,22 @@ | |||||
package org.jeecgframework.poi.excel.imports.sax.parse; | |||||
import java.util.List; | |||||
import org.jeecgframework.poi.excel.entity.sax.SaxReadCellEntity; | |||||
public interface ISaxRowRead { | |||||
/** | |||||
* 获取返回数据 | |||||
* @param <T> | |||||
* @return | |||||
*/ | |||||
public <T> List<T> getList(); | |||||
/** | |||||
* 解析数据 | |||||
* @param index | |||||
* @param datas | |||||
*/ | |||||
public void parse(int index, List<SaxReadCellEntity> datas); | |||||
} |
@@ -0,0 +1,34 @@ | |||||
package org.jeecgframework.poi.excel.imports.sax.parse; | |||||
import java.util.List; | |||||
import org.jeecgframework.poi.excel.entity.sax.SaxReadCellEntity; | |||||
import com.google.common.collect.Lists; | |||||
/** | |||||
* 当行读取数据 | |||||
* @author JueYue | |||||
* @param <T> | |||||
* @date 2015年1月1日 下午7:59:39 | |||||
*/ | |||||
@SuppressWarnings("rawtypes") | |||||
public class SaxRowRead implements ISaxRowRead { | |||||
private List list; | |||||
public SaxRowRead() { | |||||
list = Lists.newArrayList(); | |||||
} | |||||
@Override | |||||
public <T> List<T> getList() { | |||||
return list; | |||||
} | |||||
@Override | |||||
public void parse(int index, List<SaxReadCellEntity> datas) { | |||||
} | |||||
} |
@@ -12,6 +12,7 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook; | |||||
import org.apache.poi.ss.usermodel.Workbook; | import org.apache.poi.ss.usermodel.Workbook; | ||||
import org.jeecgframework.poi.excel.ExcelExportUtil; | import org.jeecgframework.poi.excel.ExcelExportUtil; | ||||
import org.jeecgframework.poi.excel.entity.ExportParams; | import org.jeecgframework.poi.excel.entity.ExportParams; | ||||
import org.jeecgframework.poi.excel.entity.enmus.ExcelType; | |||||
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.entity.vo.PoiBaseConstants; | ||||
import org.junit.Test; | import org.junit.Test; | ||||
@@ -65,8 +66,7 @@ public class ExcelExportForMap { | |||||
} | } | ||||
list.add(map); | list.add(map); | ||||
} | } | ||||
ExportParams params = new ExportParams("测试", "测试"); | |||||
params.setType(PoiBaseConstants.XSSF); | |||||
ExportParams params = new ExportParams("测试", "测试", ExcelType.HSSF); | |||||
Workbook workbook = ExcelExportUtil.exportExcel(params, entity, list); | Workbook workbook = ExcelExportUtil.exportExcel(params, entity, list); | ||||
FileOutputStream fos = new FileOutputStream("d:/tt.xlsx"); | FileOutputStream fos = new FileOutputStream("d:/tt.xlsx"); | ||||
workbook.write(fos); | workbook.write(fos); | ||||
@@ -15,6 +15,7 @@ import org.jeecgframework.poi.entity.MsgClient; | |||||
import org.jeecgframework.poi.entity.MsgClientGroup; | import org.jeecgframework.poi.entity.MsgClientGroup; | ||||
import org.jeecgframework.poi.excel.ExcelExportUtil; | import org.jeecgframework.poi.excel.ExcelExportUtil; | ||||
import org.jeecgframework.poi.excel.entity.ExportParams; | import org.jeecgframework.poi.excel.entity.ExportParams; | ||||
import org.jeecgframework.poi.excel.entity.enmus.ExcelType; | |||||
import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants; | import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants; | ||||
import org.junit.Test; | import org.junit.Test; | ||||
/** | /** | ||||
@@ -42,8 +43,7 @@ public class ExcelExportMsgClient { | |||||
list.add(client); | list.add(client); | ||||
} | } | ||||
Date start = new Date(); | Date start = new Date(); | ||||
ExportParams params = new ExportParams("2412312", "测试"); | |||||
params.setType(PoiBaseConstants.XSSF); | |||||
ExportParams params = new ExportParams("2412312", "测试", ExcelType.XSSF); | |||||
Workbook workbook = ExcelExportUtil.exportExcel(params, MsgClient.class, list); | Workbook workbook = ExcelExportUtil.exportExcel(params, MsgClient.class, list); | ||||
System.out.println(new Date().getTime() - start.getTime()); | System.out.println(new Date().getTime() - start.getTime()); | ||||
File savefile = new File("d:/"); | File savefile = new File("d:/"); | ||||
@@ -11,6 +11,7 @@ import org.apache.poi.ss.usermodel.Workbook; | |||||
import org.jeecgframework.poi.entity.statistics.StatisticEntity; | import org.jeecgframework.poi.entity.statistics.StatisticEntity; | ||||
import org.jeecgframework.poi.excel.ExcelExportUtil; | import org.jeecgframework.poi.excel.ExcelExportUtil; | ||||
import org.jeecgframework.poi.excel.entity.ExportParams; | import org.jeecgframework.poi.excel.entity.ExportParams; | ||||
import org.jeecgframework.poi.excel.entity.enmus.ExcelType; | |||||
import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants; | import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants; | ||||
import org.junit.Test; | import org.junit.Test; | ||||
@@ -19,7 +20,7 @@ public class ExcelExportStatisticTest { | |||||
public void test() throws Exception { | public void test() throws Exception { | ||||
List<StatisticEntity> list = new ArrayList<StatisticEntity>(); | List<StatisticEntity> list = new ArrayList<StatisticEntity>(); | ||||
for (int i = 0; i < 250000; i++) { | |||||
for (int i = 0; i < 25000; i++) { | |||||
StatisticEntity client = new StatisticEntity(); | StatisticEntity client = new StatisticEntity(); | ||||
client.setName("index" + i); | client.setName("index" + i); | ||||
client.setIntTest(1 + i); | client.setIntTest(1 + i); | ||||
@@ -30,8 +31,7 @@ public class ExcelExportStatisticTest { | |||||
list.add(client); | list.add(client); | ||||
} | } | ||||
Date start = new Date(); | Date start = new Date(); | ||||
ExportParams params = new ExportParams("2412312", "测试"); | |||||
params.setType(ExportParams.XSSF); | |||||
ExportParams params = new ExportParams("2412312", "测试", ExcelType.XSSF); | |||||
Workbook workbook = ExcelExportUtil.exportExcel(params, StatisticEntity.class, list); | Workbook workbook = ExcelExportUtil.exportExcel(params, StatisticEntity.class, list); | ||||
System.out.println(new Date().getTime() - start.getTime()); | System.out.println(new Date().getTime() - start.getTime()); | ||||
File savefile = new File("d:/"); | File savefile = new File("d:/"); | ||||
@@ -14,6 +14,7 @@ import org.jeecgframework.poi.entity.TeacherEntity; | |||||
import org.jeecgframework.poi.excel.ExcelExportUtil; | import org.jeecgframework.poi.excel.ExcelExportUtil; | ||||
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.enmus.ExcelType; | |||||
import org.junit.Before; | import org.junit.Before; | ||||
import org.junit.Test; | import org.junit.Test; | ||||
@@ -33,15 +34,15 @@ public class ExcelExportUtilTest { | |||||
@Test | @Test | ||||
public void oneHundredThousandRowTest() throws Exception { | public void oneHundredThousandRowTest() throws Exception { | ||||
ExportParams params = new ExportParams("2412312", "测试", ExcelType.XSSF); | |||||
Date start = new Date(); | Date start = new Date(); | ||||
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("2412312", "测试"), | |||||
CourseEntity.class, list); | |||||
Workbook workbook = ExcelExportUtil.exportExcel(params, CourseEntity.class, list); | |||||
System.out.println(new Date().getTime() - start.getTime()); | System.out.println(new Date().getTime() - start.getTime()); | ||||
File savefile = new File("d:/"); | File savefile = new File("d:/"); | ||||
if (!savefile.exists()) { | if (!savefile.exists()) { | ||||
savefile.mkdirs(); | savefile.mkdirs(); | ||||
} | } | ||||
FileOutputStream fos = new FileOutputStream("d:/tt.xls"); | |||||
FileOutputStream fos = new FileOutputStream("d:/tt.xlsx"); | |||||
workbook.write(fos); | workbook.write(fos); | ||||
fos.close(); | fos.close(); | ||||
savefile = new File("d:/1"); | savefile = new File("d:/1"); | ||||
@@ -49,7 +50,7 @@ public class ExcelExportUtilTest { | |||||
savefile.setWritable(true, false); | savefile.setWritable(true, false); | ||||
savefile.mkdirs(); | savefile.mkdirs(); | ||||
} | } | ||||
fos = new FileOutputStream("d:/1/tt3.xls"); | |||||
fos = new FileOutputStream("d:/1/tt3.xlsx"); | |||||
workbook.write(fos); | workbook.write(fos); | ||||
fos.close(); | fos.close(); | ||||
} | } | ||||
@@ -57,7 +58,7 @@ public class ExcelExportUtilTest { | |||||
@Before | @Before | ||||
public void testBefore() { | public void testBefore() { | ||||
for (int i = 0; i < 2; i++) { | |||||
for (int i = 0; i < 2000000; i++) { | |||||
courseEntity = new CourseEntity(); | courseEntity = new CourseEntity(); | ||||
courseEntity.setId("1131"); | courseEntity.setId("1131"); | ||||
courseEntity.setName("海贼王必修(" + (i + 1) + ")"); | courseEntity.setName("海贼王必修(" + (i + 1) + ")"); | ||||
@@ -41,8 +41,7 @@ public class JeecgMapExcelView extends AbstractExcelView { | |||||
new ExcelExportServer().createSheetForMap(hssfWorkbook, | new ExcelExportServer().createSheetForMap(hssfWorkbook, | ||||
(ExportParams) model.get(MapExcelConstants.PARAMS), | (ExportParams) model.get(MapExcelConstants.PARAMS), | ||||
(List<ExcelExportEntity>) model.get(MapExcelConstants.ENTITY_LIST), | (List<ExcelExportEntity>) model.get(MapExcelConstants.ENTITY_LIST), | ||||
(Collection<? extends Map<?, ?>>) model.get(MapExcelConstants.MAP_LIST), | |||||
((ExportParams) model.get(MapExcelConstants.PARAMS)).getType()); | |||||
(Collection<? extends Map<?, ?>>) model.get(MapExcelConstants.MAP_LIST)); | |||||
} | } | ||||
public boolean isIE(HttpServletRequest request) { | public boolean isIE(HttpServletRequest request) { | ||||
@@ -9,7 +9,6 @@ import javax.servlet.http.HttpServletResponse; | |||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook; | import org.apache.poi.hssf.usermodel.HSSFWorkbook; | ||||
import org.jeecgframework.poi.excel.entity.ExportParams; | import org.jeecgframework.poi.excel.entity.ExportParams; | ||||
import org.jeecgframework.poi.excel.entity.vo.MapExcelConstants; | |||||
import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants; | import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants; | ||||
import org.jeecgframework.poi.excel.export.ExcelExportServer; | import org.jeecgframework.poi.excel.export.ExcelExportServer; | ||||
import org.springframework.web.servlet.view.document.AbstractExcelView; | import org.springframework.web.servlet.view.document.AbstractExcelView; | ||||
@@ -42,15 +41,13 @@ public class JeecgSingleExcelView extends AbstractExcelView { | |||||
new ExcelExportServer().createSheet(hssfWorkbook, | new ExcelExportServer().createSheet(hssfWorkbook, | ||||
(ExportParams) map.get(NormalExcelConstants.PARAMS), | (ExportParams) map.get(NormalExcelConstants.PARAMS), | ||||
(Class<?>) map.get(NormalExcelConstants.CLASS), | (Class<?>) map.get(NormalExcelConstants.CLASS), | ||||
(Collection<?>) map.get(NormalExcelConstants.DATA_LIST), | |||||
((ExportParams) model.get(MapExcelConstants.PARAMS)).getType()); | |||||
(Collection<?>) map.get(NormalExcelConstants.DATA_LIST)); | |||||
} | } | ||||
} else { | } else { | ||||
new ExcelExportServer().createSheet(hssfWorkbook, | new ExcelExportServer().createSheet(hssfWorkbook, | ||||
(ExportParams) model.get(NormalExcelConstants.PARAMS), | (ExportParams) model.get(NormalExcelConstants.PARAMS), | ||||
(Class<?>) model.get(NormalExcelConstants.CLASS), | (Class<?>) model.get(NormalExcelConstants.CLASS), | ||||
(Collection<?>) model.get(NormalExcelConstants.DATA_LIST), | |||||
((ExportParams) model.get(MapExcelConstants.PARAMS)).getType()); | |||||
(Collection<?>) model.get(NormalExcelConstants.DATA_LIST)); | |||||
} | } | ||||
} | } | ||||
@@ -24,10 +24,7 @@ | |||||
<properties> | <properties> | ||||
<sub.version>2.0.7-SNAPSHOT</sub.version> | <sub.version>2.0.7-SNAPSHOT</sub.version> | ||||
<poi-ooxml-schemas.version>3.9</poi-ooxml-schemas.version> | |||||
<poi-ooxml.version>3.9</poi-ooxml.version> | |||||
<poi-scratchpad.version>3.9</poi-scratchpad.version> | |||||
<poi.version>3.9</poi.version> | |||||
<poi.version>3.11</poi.version> | |||||
<guava.version>16.0.1</guava.version> | <guava.version>16.0.1</guava.version> | ||||
<reflectasm.version>1.09</reflectasm.version> | <reflectasm.version>1.09</reflectasm.version> | ||||
<commons-lang.version>2.6</commons-lang.version> | <commons-lang.version>2.6</commons-lang.version> | ||||
@@ -46,17 +43,17 @@ | |||||
<dependency> | <dependency> | ||||
<groupId>org.apache.poi</groupId> | <groupId>org.apache.poi</groupId> | ||||
<artifactId>poi-ooxml</artifactId> | <artifactId>poi-ooxml</artifactId> | ||||
<version>${poi-ooxml.version}</version> | |||||
<version>${poi.version}</version> | |||||
</dependency> | </dependency> | ||||
<dependency> | <dependency> | ||||
<groupId>org.apache.poi</groupId> | <groupId>org.apache.poi</groupId> | ||||
<artifactId>poi-ooxml-schemas</artifactId> | <artifactId>poi-ooxml-schemas</artifactId> | ||||
<version>${poi-ooxml-schemas.version}</version> | |||||
<version>${poi.version}</version> | |||||
</dependency> | </dependency> | ||||
<dependency> | <dependency> | ||||
<groupId>org.apache.poi</groupId> | <groupId>org.apache.poi</groupId> | ||||
<artifactId>poi-scratchpad</artifactId> | <artifactId>poi-scratchpad</artifactId> | ||||
<version>${poi-scratchpad.version}</version> | |||||
<version>${poi.version}</version> | |||||
</dependency> | </dependency> | ||||
<!-- google 工具类 --> | <!-- google 工具类 --> | ||||