From 3c42623ebd0b44b9cc8548f0a357bd2efff70281 Mon Sep 17 00:00:00 2001 From: jueyue Date: Sat, 9 Nov 2019 13:39:52 +0800 Subject: [PATCH] Add instructions --- README.md | 62 +++++++++++++++---- .../excel/imports/ExcelImportService.java | 3 +- .../excel/imports/sax/SaxReadExcel.java | 10 ++- .../excel/imports/sax/parse/ISaxRowRead.java | 16 +++-- .../excel/imports/sax/parse/SaxRowRead.java | 25 ++------ 5 files changed, 68 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index 9d48897..2ccd426 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,10 @@ Spring Boot 支持 https://gitee.com/lemur/easypoi-spring-boot-starter **[https://opensource.afterturn.cn/doc/easypoi.html](http://opensource.afterturn.cn/doc/easypoi.html)** - +下一步计划 + - 国际化,翻译文档以及注释 + - pdf全部改为模板导出方式 + - word模板和excel功能同步 [用户征集](https://gitee.com/lemur/easypoi/issues/IFDX7) @@ -64,13 +67,46 @@ EasyPoi的主要特点 4.AbstractView 支持,web导出可以简单明了 --------------------------- -EasyPoi的几个入口工具类 +什么场景该用哪个方法 --------------------------- - 1.ExcelExportUtil Excel导出( - 普通导出,模板导出) - 2.ExcelImportUtil Excel导入 - 3.WordExportUtil Word导出(只支持docx ,doc版本poi存在图片的bug,暂不支持) + - 导出 + 1.正规excel导出 (格式简单,数据量可以,5W以内吧) + 注解方式: ExcelExportUtil.exportExcel(ExportParams entity, Class pojoClass,Collection dataSet) + 2.不定多少列,但是格式依然简单数据库不大 + 自定义方式: ExcelExportUtil.exportExcel(ExportParams entity, List entityList,Collection dataSet) + 3.数据量大超过5W,还在100W以内 + 注解方式 ExcelExportUtil.exportBigExcel(ExportParams entity, Class pojoClass,IExcelExportServer server, Object queryParams) + 自定义方式: ExcelExportUtil.exportBigExcel(ExportParams entity, List excelParams,IExcelExportServer server, Object queryParams) + 4.样式复杂,数据量尽量别大 + 模板导出 ExcelExportUtil.exportExcel(TemplateExportParams params, Map map) + 5.一次导出多个风格不一致的sheet + 模板导出 ExcelExportUtil.exportExcel(Map> map,TemplateExportParams params) + 6.一个模板但是要导出非常多份 + 模板导出 ExcelExportUtil.exportExcelClone(Map>> map,TemplateExportParams params) + 7.模板无法满足你的自定义,试试html + 自己构造html,然后我给你转成excel ExcelXorHtmlUtil.htmlToExcel(String html, ExcelType type) + 8.数据量过百万级了.放弃excel吧,csv导出 + 注解方式: CsvExportUtil.exportCsv(CsvExportParams params, Class pojoClass, OutputStream outputStream) + 自定义方式: CsvExportUtil.exportCsv(CsvExportParams params, List entityList, OutputStream outputStream) + 9.word导出 + 模板导出: WordExportUtil.exportWord07(String url, Map map) + 10.PDF导出 + 模板导出: TODO + - 导入 + 如果想提高性能 ImportParams 的concurrentTask 可以帮助并发导入,仅单行,最小1000 + excel有单个的那种特殊读取,readSingleCell 参数可以支持 + 1. 不需要检验,数据量不大(5W以内) + 注解或者MAP: ExcelImportUtil.importExcel(File file, Class pojoClass, ImportParams params) + 2. 需要导入,数据量不大 + 注解或者MAP: ExcelImportUtil.importExcelMore(InputStream inputstream, Class pojoClass, ImportParams params) + 3. 数据量大了,或者你有特别多的导入操作,内存比较少,仅支持单行 + SAX方式 ExcelImportUtil.importExcelBySax(InputStream inputstream, Class pojoClass, ImportParams params, IReadHandler handler) + 4. 数据量超过EXCEL限制,CSV读取 + 小数据量: CsvImportUtil.importCsv(InputStream inputstream, Class pojoClass,CsvImportParams params) + 大数据量: CsvImportUtil.importCsv(InputStream inputstream, Class pojoClass,CsvImportParams params, IReadHandler readHandler) + + --------------------------- 关于Excel导出XLS和XLSX区别 @@ -96,24 +132,24 @@ SNAPSHOT 版本-很少发布 https://oss.sonatype.org/content/groups/public/ ```xml - cn.afterturn - easypoi-spring-boot-starter - 4.1.1 - + cn.afterturn + easypoi-spring-boot-starter + 4.1.2 + cn.afterturn easypoi-base - 4.1.1 + 4.1.2 cn.afterturn easypoi-web - 4.1.1 + 4.1.2 cn.afterturn easypoi-annotation - 4.1.1 + 4.1.2 ``` diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/ExcelImportService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/ExcelImportService.java index e7d4594..c059edb 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/ExcelImportService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/ExcelImportService.java @@ -558,7 +558,8 @@ public class ExcelImportService extends ImportBaseService { List excelCollection) { if (params.getImportFields() != null) { - if (params.isNeedCheckOrder()) { // 同时校验列顺序 + // 同时校验列顺序 + if (params.isNeedCheckOrder()) { if (params.getImportFields().length != titlemap.size()) { LOGGER.error("excel列顺序不一致"); diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/SaxReadExcel.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/SaxReadExcel.java index 92d1888..0aefaf2 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/SaxReadExcel.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/SaxReadExcel.java @@ -48,18 +48,18 @@ public class SaxReadExcel { private static final Logger LOGGER = LoggerFactory.getLogger(SaxReadExcel.class); - public List readExcel(InputStream inputstream, Class pojoClass, ImportParams params, - IReadHandler hanlder) { + public void readExcel(InputStream inputstream, Class pojoClass, ImportParams params, + IReadHandler handler) { try { OPCPackage opcPackage = OPCPackage.open(inputstream); - return readExcel(opcPackage, pojoClass, params, null, hanlder); + readExcel(opcPackage, pojoClass, params, null, handler); } catch (Exception e) { LOGGER.error(e.getMessage(), e); throw new ExcelImportException(e.getMessage()); } } - private List readExcel(OPCPackage opcPackage, Class pojoClass, ImportParams params, + private void readExcel(OPCPackage opcPackage, Class pojoClass, ImportParams params, ISaxRowRead rowRead, IReadHandler handler) { try { XSSFReader xssfReader = new XSSFReader(opcPackage); @@ -81,12 +81,10 @@ public class SaxReadExcel { sheet.close(); } sheetIndex++; - } if (handler != null) { handler.doAfterAll(); } - return rowRead.getList(); } catch (Exception e) { LOGGER.error(e.getMessage(), e); throw new ExcelImportException("SAX导入数据失败"); diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/parse/ISaxRowRead.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/parse/ISaxRowRead.java index b9f0ae5..006b387 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/parse/ISaxRowRead.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/parse/ISaxRowRead.java @@ -19,19 +19,17 @@ import java.util.List; import cn.afterturn.easypoi.excel.entity.sax.SaxReadCellEntity; +/** + * @author jueyue + * @since 3.1 + * @date 2017-11-9 13:04:06 + */ public interface ISaxRowRead { - /** - * 获取返回数据 - * @param - * @return - */ - public List getList(); - /** * 解析数据 * @param index - * @param datas + * @param cellList */ - public void parse(int index, List datas); + void parse(int index, List cellList); } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/parse/SaxRowRead.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/parse/SaxRowRead.java index 7a61dcf..df860da 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/parse/SaxRowRead.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/imports/sax/parse/SaxRowRead.java @@ -45,10 +45,6 @@ public class SaxRowRead extends ImportBaseService implements ISaxRowRead { private static final Logger LOGGER = LoggerFactory .getLogger(SaxRowRead.class); - /** - * 需要返回的数据 - **/ - private List list; /** * 导出的对象 **/ @@ -77,7 +73,6 @@ public class SaxRowRead extends ImportBaseService implements ISaxRowRead { private IReadHandler handler; public SaxRowRead(Class pojoClass, ImportParams params, IReadHandler handler) { - list = Lists.newArrayList(); this.params = params; this.pojoClass = pojoClass; cellValueServer = new CellValueService(); @@ -102,25 +97,20 @@ public class SaxRowRead extends ImportBaseService implements ISaxRowRead { } @Override - public List getList() { - return list; - } - - @Override - public void parse(int index, List datas) { + public void parse(int index, List cellList) { try { - if (datas == null || datas.size() == 0) { + if (cellList == null || cellList.size() == 0) { return; } - //标题行跳过 + //skip title if (index < params.getTitleRows()) { return; } - //表头行 + //skip head if (index < params.getTitleRows() + params.getHeadRows()) { - addHeadData(datas); + addHeadData(cellList); } else { - addListData(datas); + addListData(cellList); } } catch (Exception e) { LOGGER.error(e.getMessage(), e); @@ -161,9 +151,6 @@ public class SaxRowRead extends ImportBaseService implements ISaxRowRead { for (ExcelCollectionParams param : excelCollection) { addListContinue(object, param, datas, titlemap, targetId, params); } - if (handler == null) { - list.add(object); - } } }