| @@ -11,6 +11,7 @@ import org.jeecgframework.poi.excel.entity.result.ExcelImportResult; | |||||
| import org.jeecgframework.poi.excel.imports.ExcelImportServer; | import org.jeecgframework.poi.excel.imports.ExcelImportServer; | ||||
| import org.jeecgframework.poi.excel.imports.sax.SaxReadExcel; | import org.jeecgframework.poi.excel.imports.sax.SaxReadExcel; | ||||
| import org.jeecgframework.poi.excel.imports.sax.parse.ISaxRowRead; | import org.jeecgframework.poi.excel.imports.sax.parse.ISaxRowRead; | ||||
| import org.jeecgframework.poi.handler.inter.IExcelReadRowHanlder; | |||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
| @@ -108,25 +109,11 @@ public class ExcelImportUtil { | |||||
| return null; | return null; | ||||
| } | } | ||||
| /** | |||||
| * Excel 通过SAX解析方法,适合大数据导入,不支持图片 | |||||
| * 导入 数据源本地文件,不返回校验结果 导入 字 段类型 Integer,Long,Double,Date,String,Boolean | |||||
| * | |||||
| * @param file | |||||
| * @param pojoClass | |||||
| * @param params | |||||
| * @return | |||||
| * @throws Exception | |||||
| */ | |||||
| public static <T> List<T> importExcelBySax(File file, Class<?> pojoClass, ImportParams params) { | |||||
| return new SaxReadExcel().readExcel(file, pojoClass, params, null); | |||||
| } | |||||
| /** | /** | ||||
| * Excel 通过SAX解析方法,适合大数据导入,不支持图片 | * Excel 通过SAX解析方法,适合大数据导入,不支持图片 | ||||
| * 导入 数据源IO流,不返回校验结果 导入 字段类型 Integer,Long,Double,Date,String,Boolean | * 导入 数据源IO流,不返回校验结果 导入 字段类型 Integer,Long,Double,Date,String,Boolean | ||||
| * | * | ||||
| * @param file | |||||
| * @param inputstream | |||||
| * @param pojoClass | * @param pojoClass | ||||
| * @param params | * @param params | ||||
| * @return | * @return | ||||
| @@ -134,7 +121,7 @@ public class ExcelImportUtil { | |||||
| */ | */ | ||||
| public static <T> List<T> importExcelBySax(InputStream inputstream, Class<?> pojoClass, | public static <T> List<T> importExcelBySax(InputStream inputstream, Class<?> pojoClass, | ||||
| ImportParams params) { | ImportParams params) { | ||||
| return new SaxReadExcel().readExcel(inputstream, pojoClass, params, null); | |||||
| return new SaxReadExcel().readExcel(inputstream, pojoClass, params, null, null); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -146,8 +133,10 @@ public class ExcelImportUtil { | |||||
| * @return | * @return | ||||
| * @throws Exception | * @throws Exception | ||||
| */ | */ | ||||
| public static <T> List<T> importExcelBySax(File file, ISaxRowRead rowRead) { | |||||
| return new SaxReadExcel().readExcel(file, null, null, rowRead); | |||||
| @SuppressWarnings("rawtypes") | |||||
| public static void importExcelBySax(InputStream inputstream, Class<?> pojoClass, | |||||
| ImportParams params, IExcelReadRowHanlder hanlder) { | |||||
| new SaxReadExcel().readExcel(inputstream, pojoClass, params, null, hanlder); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -160,7 +149,7 @@ public class ExcelImportUtil { | |||||
| * @throws Exception | * @throws Exception | ||||
| */ | */ | ||||
| public static <T> List<T> importExcelBySax(InputStream inputstream, ISaxRowRead rowRead) { | public static <T> List<T> importExcelBySax(InputStream inputstream, ISaxRowRead rowRead) { | ||||
| return new SaxReadExcel().readExcel(inputstream, null, null, rowRead); | |||||
| return new SaxReadExcel().readExcel(inputstream, null, null, rowRead, null); | |||||
| } | } | ||||
| } | } | ||||
| @@ -5,9 +5,6 @@ import java.io.FileOutputStream; | |||||
| import java.io.InputStream; | import java.io.InputStream; | ||||
| import java.io.PushbackInputStream; | import java.io.PushbackInputStream; | ||||
| import java.lang.reflect.Field; | import java.lang.reflect.Field; | ||||
| import java.lang.reflect.Method; | |||||
| import java.lang.reflect.ParameterizedType; | |||||
| import java.text.SimpleDateFormat; | |||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import java.util.Collection; | import java.util.Collection; | ||||
| import java.util.Date; | import java.util.Date; | ||||
| @@ -30,13 +27,10 @@ import org.apache.poi.ss.usermodel.Sheet; | |||||
| import org.apache.poi.ss.usermodel.Workbook; | import org.apache.poi.ss.usermodel.Workbook; | ||||
| import org.apache.poi.xssf.usermodel.XSSFSheet; | import org.apache.poi.xssf.usermodel.XSSFSheet; | ||||
| import org.apache.poi.xssf.usermodel.XSSFWorkbook; | import org.apache.poi.xssf.usermodel.XSSFWorkbook; | ||||
| import org.jeecgframework.poi.excel.annotation.Excel; | |||||
| import org.jeecgframework.poi.excel.annotation.ExcelTarget; | import org.jeecgframework.poi.excel.annotation.ExcelTarget; | ||||
| import org.jeecgframework.poi.excel.annotation.ExcelVerify; | |||||
| import org.jeecgframework.poi.excel.entity.ImportParams; | import org.jeecgframework.poi.excel.entity.ImportParams; | ||||
| import org.jeecgframework.poi.excel.entity.params.ExcelCollectionParams; | import org.jeecgframework.poi.excel.entity.params.ExcelCollectionParams; | ||||
| import org.jeecgframework.poi.excel.entity.params.ExcelImportEntity; | import org.jeecgframework.poi.excel.entity.params.ExcelImportEntity; | ||||
| import org.jeecgframework.poi.excel.entity.params.ExcelVerifyEntity; | |||||
| import org.jeecgframework.poi.excel.entity.result.ExcelImportResult; | import org.jeecgframework.poi.excel.entity.result.ExcelImportResult; | ||||
| import org.jeecgframework.poi.excel.entity.result.ExcelVerifyHanlderResult; | import org.jeecgframework.poi.excel.entity.result.ExcelVerifyHanlderResult; | ||||
| import org.jeecgframework.poi.excel.imports.base.ImportBaseService; | import org.jeecgframework.poi.excel.imports.base.ImportBaseService; | ||||
| @@ -1,6 +1,5 @@ | |||||
| package org.jeecgframework.poi.excel.imports.sax; | package org.jeecgframework.poi.excel.imports.sax; | ||||
| import java.io.File; | |||||
| import java.io.InputStream; | import java.io.InputStream; | ||||
| import java.util.Iterator; | import java.util.Iterator; | ||||
| import java.util.List; | import java.util.List; | ||||
| @@ -12,6 +11,7 @@ import org.jeecgframework.poi.excel.entity.ImportParams; | |||||
| import org.jeecgframework.poi.excel.imports.sax.parse.ISaxRowRead; | import org.jeecgframework.poi.excel.imports.sax.parse.ISaxRowRead; | ||||
| import org.jeecgframework.poi.excel.imports.sax.parse.SaxRowRead; | import org.jeecgframework.poi.excel.imports.sax.parse.SaxRowRead; | ||||
| import org.jeecgframework.poi.exception.excel.ExcelImportException; | import org.jeecgframework.poi.exception.excel.ExcelImportException; | ||||
| import org.jeecgframework.poi.handler.inter.IExcelReadRowHanlder; | |||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
| import org.xml.sax.ContentHandler; | import org.xml.sax.ContentHandler; | ||||
| @@ -26,26 +26,16 @@ import org.xml.sax.helpers.XMLReaderFactory; | |||||
| * @date 2014年12月29日 下午9:41:38 | * @date 2014年12月29日 下午9:41:38 | ||||
| * @version 1.0 | * @version 1.0 | ||||
| */ | */ | ||||
| @SuppressWarnings("rawtypes") | |||||
| public class SaxReadExcel { | public class SaxReadExcel { | ||||
| private static final Logger LOGGER = LoggerFactory.getLogger(SaxReadExcel.class); | private static final Logger LOGGER = LoggerFactory.getLogger(SaxReadExcel.class); | ||||
| public <T> List<T> readExcel(InputStream inputstream, Class<?> pojoClass, ImportParams params, | public <T> List<T> readExcel(InputStream inputstream, Class<?> pojoClass, ImportParams params, | ||||
| ISaxRowRead rowRead) { | |||||
| ISaxRowRead rowRead, IExcelReadRowHanlder hanlder) { | |||||
| try { | try { | ||||
| OPCPackage opcPackage = OPCPackage.open(inputstream); | OPCPackage opcPackage = OPCPackage.open(inputstream); | ||||
| return readExcel(opcPackage, pojoClass, params, rowRead); | |||||
| } catch (Exception e) { | |||||
| LOGGER.error(e.getMessage(), e); | |||||
| throw new ExcelImportException(e.getMessage()); | |||||
| } | |||||
| } | |||||
| public <T> List<T> readExcel(File file, Class<?> pojoClass, ImportParams params, | |||||
| ISaxRowRead rowRead) { | |||||
| try { | |||||
| OPCPackage opcPackage = OPCPackage.open(file); | |||||
| return readExcel(opcPackage, pojoClass, params, rowRead); | |||||
| return readExcel(opcPackage, pojoClass, params, rowRead, hanlder); | |||||
| } catch (Exception e) { | } catch (Exception e) { | ||||
| LOGGER.error(e.getMessage(), e); | LOGGER.error(e.getMessage(), e); | ||||
| throw new ExcelImportException(e.getMessage()); | throw new ExcelImportException(e.getMessage()); | ||||
| @@ -53,12 +43,12 @@ public class SaxReadExcel { | |||||
| } | } | ||||
| private <T> List<T> readExcel(OPCPackage opcPackage, Class<?> pojoClass, ImportParams params, | private <T> List<T> readExcel(OPCPackage opcPackage, Class<?> pojoClass, ImportParams params, | ||||
| ISaxRowRead rowRead) { | |||||
| ISaxRowRead rowRead, IExcelReadRowHanlder hanlder) { | |||||
| try { | try { | ||||
| XSSFReader xssfReader = new XSSFReader(opcPackage); | XSSFReader xssfReader = new XSSFReader(opcPackage); | ||||
| SharedStringsTable sst = xssfReader.getSharedStringsTable(); | SharedStringsTable sst = xssfReader.getSharedStringsTable(); | ||||
| if (rowRead == null) { | if (rowRead == null) { | ||||
| rowRead = new SaxRowRead(pojoClass, params); | |||||
| rowRead = new SaxRowRead(pojoClass, params, hanlder); | |||||
| } | } | ||||
| XMLReader parser = fetchSheetParser(sst, rowRead); | XMLReader parser = fetchSheetParser(sst, rowRead); | ||||
| Iterator<InputStream> sheets = xssfReader.getSheetsData(); | Iterator<InputStream> sheets = xssfReader.getSheetsData(); | ||||
| @@ -16,6 +16,7 @@ import org.jeecgframework.poi.excel.entity.sax.SaxReadCellEntity; | |||||
| import org.jeecgframework.poi.excel.imports.CellValueServer; | import org.jeecgframework.poi.excel.imports.CellValueServer; | ||||
| import org.jeecgframework.poi.excel.imports.base.ImportBaseService; | import org.jeecgframework.poi.excel.imports.base.ImportBaseService; | ||||
| import org.jeecgframework.poi.exception.excel.ExcelImportException; | import org.jeecgframework.poi.exception.excel.ExcelImportException; | ||||
| import org.jeecgframework.poi.handler.inter.IExcelReadRowHanlder; | |||||
| import org.jeecgframework.poi.util.POIPublicUtil; | import org.jeecgframework.poi.util.POIPublicUtil; | ||||
| import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
| @@ -52,11 +53,14 @@ public class SaxRowRead extends ImportBaseService implements ISaxRowRead { | |||||
| private CellValueServer cellValueServer; | private CellValueServer cellValueServer; | ||||
| public SaxRowRead(Class<?> pojoClass, ImportParams params) { | |||||
| private IExcelReadRowHanlder hanlder; | |||||
| public SaxRowRead(Class<?> pojoClass, ImportParams params, IExcelReadRowHanlder hanlder) { | |||||
| list = Lists.newArrayList(); | list = Lists.newArrayList(); | ||||
| this.params = params; | this.params = params; | ||||
| this.pojoClass = pojoClass; | this.pojoClass = pojoClass; | ||||
| cellValueServer = new CellValueServer(); | cellValueServer = new CellValueServer(); | ||||
| this.hanlder = hanlder; | |||||
| initParams(pojoClass, params); | initParams(pojoClass, params); | ||||
| } | } | ||||
| @@ -115,6 +119,9 @@ public class SaxRowRead extends ImportBaseService implements ISaxRowRead { | |||||
| addListContinue(object, param, datas, titlemap, targetId, params); | addListContinue(object, param, datas, titlemap, targetId, params); | ||||
| } | } | ||||
| } else { | } else { | ||||
| if (object != null && hanlder != null) { | |||||
| hanlder.hanlder(object); | |||||
| } | |||||
| object = POIPublicUtil.createObject(pojoClass, targetId); | object = POIPublicUtil.createObject(pojoClass, targetId); | ||||
| SaxReadCellEntity entity; | SaxReadCellEntity entity; | ||||
| for (int i = 0, le = datas.size(); i < le; i++) { | for (int i = 0, le = datas.size(); i < le; i++) { | ||||
| @@ -127,7 +134,9 @@ public class SaxRowRead extends ImportBaseService implements ISaxRowRead { | |||||
| for (ExcelCollectionParams param : excelCollection) { | for (ExcelCollectionParams param : excelCollection) { | ||||
| addListContinue(object, param, datas, titlemap, targetId, params); | addListContinue(object, param, datas, titlemap, targetId, params); | ||||
| } | } | ||||
| list.add(object); | |||||
| if (hanlder == null) { | |||||
| list.add(object); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -0,0 +1,16 @@ | |||||
| package org.jeecgframework.poi.handler.inter; | |||||
| /** | |||||
| * 接口自定义处理类 | |||||
| * @author JueYue | |||||
| * @date 2015年1月16日 下午8:06:26 | |||||
| * @param <T> | |||||
| */ | |||||
| public interface IExcelReadRowHanlder<T> { | |||||
| /** | |||||
| * 处理解析对象 | |||||
| * @param t | |||||
| */ | |||||
| public void hanlder(T t); | |||||
| } | |||||
| @@ -1,6 +1,8 @@ | |||||
| package org.jeecgframework.poi.excel; | package org.jeecgframework.poi.excel; | ||||
| import java.io.File; | import java.io.File; | ||||
| import java.io.FileInputStream; | |||||
| import java.io.FileNotFoundException; | |||||
| import java.util.Date; | import java.util.Date; | ||||
| import java.util.List; | import java.util.List; | ||||
| @@ -16,17 +18,22 @@ public class ExcelImportUtilTest { | |||||
| @Test | @Test | ||||
| public void test() { | public void test() { | ||||
| ImportParams params = new ImportParams(); | |||||
| params.setTitleRows(1); | |||||
| long start = new Date().getTime(); | |||||
| List<StatisticEntity> list = ExcelImportUtil.importExcelBySax(new File("d:/tt.xlsx"), | |||||
| StatisticEntity.class, params); | |||||
| // List<StatisticEntity> list = ExcelImportUtil.importExcelBySax(new File("d:/tt.xlsx"), | |||||
| // StatisticEntity.class, params); | |||||
| /*for (int i = 0; i < list.size(); i++) { | |||||
| System.out.println(ReflectionToStringBuilder.toString(list.get(i))); | |||||
| }*/ | |||||
| System.out.println(list.size() + "-----" + (new Date().getTime() - start)); | |||||
| try { | |||||
| ImportParams params = new ImportParams(); | |||||
| params.setTitleRows(1); | |||||
| long start = new Date().getTime(); | |||||
| List<StatisticEntity> list = ExcelImportUtil.importExcelBySax(new FileInputStream( | |||||
| new File("d:/tt.xlsx")), StatisticEntity.class, params); | |||||
| // List<StatisticEntity> list = ExcelImportUtil.importExcelBySax(new File("d:/tt.xlsx"), | |||||
| // StatisticEntity.class, params); | |||||
| /*for (int i = 0; i < list.size(); i++) { | |||||
| System.out.println(ReflectionToStringBuilder.toString(list.get(i))); | |||||
| }*/ | |||||
| System.out.println(list.size() + "-----" + (new Date().getTime() - start)); | |||||
| } catch (FileNotFoundException e) { | |||||
| // TODO Auto-generated catch block | |||||
| e.printStackTrace(); | |||||
| } | |||||
| } | } | ||||
| // @Test | // @Test | ||||
| @@ -161,4 +161,15 @@ | |||||
| </plugins> | </plugins> | ||||
| </build> | </build> | ||||
| <distributionManagement> | |||||
| <repository> | |||||
| <id>postaop-common-release</id> | |||||
| <url>http://192.168.1.99:8081/nexus/content/repositories/postaop-common-release/</url> | |||||
| </repository> | |||||
| <snapshotRepository> | |||||
| <id>postaop-common-snapshot</id> | |||||
| <url>http://192.168.1.99:8081/nexus/content/repositories/postaop-common-snapshot/</url> | |||||
| </snapshotRepository> | |||||
| </distributionManagement> | |||||
| </project> | </project> | ||||