diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/csv/CsvExportUtil.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/csv/CsvExportUtil.java index 880afe4..53a69c6 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/csv/CsvExportUtil.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/csv/CsvExportUtil.java @@ -4,6 +4,7 @@ import cn.afterturn.easypoi.csv.entity.CsvExportParams; import cn.afterturn.easypoi.csv.export.CsvExportService; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.handler.inter.IExcelExportServer; +import cn.afterturn.easypoi.handler.inter.IWriter; import java.io.OutputStream; import java.util.Collection; @@ -16,7 +17,8 @@ import java.util.List; */ public final class CsvExportUtil { - private CsvExportService cs; + private CsvExportUtil() { + } /** @@ -28,10 +30,9 @@ public final class CsvExportUtil { * @param outputStream */ public static void exportCsv(CsvExportParams params, Class pojoClass, Collection dataSet, OutputStream outputStream) { - CsvExportUtil ce = new CsvExportUtil(); - ce.cs = new CsvExportService(outputStream, params, pojoClass); - ce.write(dataSet); - ce.close(); + IWriter writer = new CsvExportService(outputStream, params, pojoClass); + writer.writer(dataSet); + writer.close(); } /** @@ -44,25 +45,23 @@ public final class CsvExportUtil { * @param outputStream */ public static void exportCsv(CsvExportParams params, Class pojoClass, IExcelExportServer server, Object queryParams, OutputStream outputStream) { - CsvExportUtil ce = new CsvExportUtil(); - ce.cs = new CsvExportService(outputStream, params, pojoClass); - int page = 1; + IWriter writer = new CsvExportService(outputStream, params, pojoClass); + int page = 1; Collection dataSet; while ((dataSet = server.selectListForExcelExport(queryParams, page)) != null && dataSet.size() > 0) { page++; - ce.write(dataSet); + writer.writer(dataSet); } - ce.close(); + writer.close(); } /** * @param params 表格标题属性 * @param pojoClass Excel对象Class */ - public static CsvExportUtil exportCsv(CsvExportParams params, Class pojoClass, OutputStream outputStream) { + public static IWriter exportCsv(CsvExportParams params, Class pojoClass, OutputStream outputStream) { CsvExportUtil ce = new CsvExportUtil(); - ce.cs = new CsvExportService(outputStream, params, pojoClass); - return ce; + return new CsvExportService(outputStream, params, pojoClass); } /** @@ -71,18 +70,8 @@ public final class CsvExportUtil { * @param params 表格标题属性 * @param entityList Map对象列表 */ - public static CsvExportUtil exportCsv(CsvExportParams params, List entityList, OutputStream outputStream) { - CsvExportUtil ce = new CsvExportUtil(); - ce.cs = new CsvExportService(outputStream, params, entityList); - return ce; + public static IWriter exportCsv(CsvExportParams params, List entityList, OutputStream outputStream) { + return new CsvExportService(outputStream, params, entityList); } - public CsvExportUtil write(Collection dataSet) { - this.cs.write(dataSet); - return this; - } - - public void close() { - this.cs.close(); - } } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/csv/export/CsvExportService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/csv/export/CsvExportService.java index 7739711..d37fc50 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/csv/export/CsvExportService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/csv/export/CsvExportService.java @@ -7,6 +7,7 @@ import cn.afterturn.easypoi.excel.entity.vo.BaseEntityTypeConstants; import cn.afterturn.easypoi.excel.export.base.BaseExportService; import cn.afterturn.easypoi.exception.excel.ExcelExportException; import cn.afterturn.easypoi.exception.excel.enums.ExcelExportEnum; +import cn.afterturn.easypoi.handler.inter.IWriter; import cn.afterturn.easypoi.util.PoiPublicUtil; import org.apache.commons.lang3.builder.ReflectionToStringBuilder; import org.apache.poi.util.IOUtils; @@ -23,7 +24,7 @@ import java.util.*; /** * @author by jueyue on 18-11-14. */ -public class CsvExportService extends BaseExportService { +public class CsvExportService extends BaseExportService implements IWriter { private static final Logger LOGGER = LoggerFactory.getLogger(CsvExportService.class); @@ -98,42 +99,6 @@ public class CsvExportService extends BaseExportService { } } - /** - * 导出Csv类文件 - * - * @param dataSet 集合 - */ - public CsvExportService write(Collection dataSet) { - try { - return writerData(dataSet); - } catch (Exception e) { - LOGGER.error(e.getMessage(), e); - throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e.getCause()); - } - } - - private CsvExportService writerData(Collection dataSet) { - try { - Iterator iterator = dataSet.iterator(); - String line = null; - int i = 0; - while (iterator.hasNext()) { - Object obj = iterator.next(); - line = createRow(excelParams, params, obj); - writer.write(line); - if (i % 10000 == 0) { - writer.flush(); - } - i++; - } - writer.flush(); - return this; - } catch (Exception e) { - LOGGER.error(e.getMessage(), e); - throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e.getCause()); - } - } - /** * 创建行 * @@ -189,7 +154,33 @@ public class CsvExportService extends BaseExportService { return "\n"; } - public void close() { + + @Override + public IWriter writer(Collection data) { + try { + Iterator iterator = data.iterator(); + String line = null; + int i = 0; + while (iterator.hasNext()) { + Object obj = iterator.next(); + line = createRow(excelParams, params, obj); + writer.write(line); + if (i % 10000 == 0) { + writer.flush(); + } + i++; + } + writer.flush(); + return this; + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e.getCause()); + } + } + + @Override + public Void close() { IOUtils.closeQuietly(this.writer); + return null; } } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/ExcelExportUtil.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/ExcelExportUtil.java index 628a8d3..acf683f 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/ExcelExportUtil.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/ExcelExportUtil.java @@ -23,6 +23,7 @@ import cn.afterturn.easypoi.excel.export.ExcelBatchExportService; import cn.afterturn.easypoi.excel.export.ExcelExportService; import cn.afterturn.easypoi.excel.export.template.ExcelExportOfTemplateUtil; import cn.afterturn.easypoi.handler.inter.IExcelExportServer; +import cn.afterturn.easypoi.handler.inter.IWriter; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.streaming.SXSSFWorkbook; @@ -47,6 +48,31 @@ public final class ExcelExportUtil { private ExcelExportUtil() { } + /** + * 大数据量导出 + * + * @param entity 表格标题属性 + * @param pojoClass Excel对象Class + */ + public static IWriter exportBigExcel(ExportParams entity, Class pojoClass) { + ExcelBatchExportService batchServer = new ExcelBatchExportService(); + batchServer.init(entity, pojoClass); + return batchServer; + } + + /** + * 大数据量导出 + * + * @param entity + * @param excelParams + * @return + */ + public static IWriter exportBigExcel(ExportParams entity, List excelParams) { + ExcelBatchExportService batchServer = new ExcelBatchExportService(); + batchServer.init(entity, excelParams); + return batchServer; + } + /** * 大数据量导出 * diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelBatchExportService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelBatchExportService.java index 27edc7a..33a9e51 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelBatchExportService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelBatchExportService.java @@ -8,6 +8,7 @@ import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler; import cn.afterturn.easypoi.exception.excel.ExcelExportException; import cn.afterturn.easypoi.exception.excel.enums.ExcelExportEnum; import cn.afterturn.easypoi.handler.inter.IExcelExportServer; +import cn.afterturn.easypoi.handler.inter.IWriter; import cn.afterturn.easypoi.util.PoiExcelGraphDataUtil; import cn.afterturn.easypoi.util.PoiPublicUtil; import org.apache.poi.ss.usermodel.Drawing; @@ -26,7 +27,7 @@ import static cn.afterturn.easypoi.excel.ExcelExportUtil.USE_SXSSF_LIMIT; * @author JueYue * 2016年8月29日 */ -public class ExcelBatchExportService extends ExcelExportService { +public class ExcelBatchExportService extends ExcelExportService implements IWriter { private Workbook workbook; private Sheet sheet; @@ -97,25 +98,6 @@ public class ExcelBatchExportService extends ExcelExportService { } } - public Workbook appendData(Collection dataSet) { - if (sheet.getLastRowNum() + dataSet.size() > entity.getMaxNum()) { - sheet = workbook.createSheet(); - index = 0; - } - - Iterator its = dataSet.iterator(); - while (its.hasNext()) { - Object t = its.next(); - try { - index += createCells(patriarch, index, t, excelParams, sheet, workbook, rowHeight, 0)[0]; - } catch (Exception e) { - LOGGER.error(e.getMessage(), e); - throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e); - } - } - return workbook; - } - @Override protected void insertDataToSheet(Workbook workbook, ExportParams entity, List entityList, Collection dataSet, @@ -150,25 +132,49 @@ public class ExcelBatchExportService extends ExcelExportService { } } - public Workbook closeExportBigExcel() { - if (entity.getFreezeCol() != 0) { - sheet.createFreezePane(entity.getFreezeCol(), titleHeight, entity.getFreezeCol(), titleHeight); - } - mergeCells(sheet, excelParams, titleHeight); - // 创建合计信息 - addStatisticsRow(getExcelExportStyler().getStyles(true, null), sheet); - return workbook; - } - public Workbook exportBigExcel(IExcelExportServer server, Object queryParams) { int page = 1; List list = server .selectListForExcelExport(queryParams, page++); while (list != null && list.size() > 0) { - appendData(list); + writer(list); list = server.selectListForExcelExport(queryParams, page++); } - return closeExportBigExcel(); + return close(); + } + + @Override + public Workbook get() { + return this.workbook; + } + + @Override + public IWriter writer(Collection data) { + if (sheet.getLastRowNum() + data.size() > entity.getMaxNum()) { + sheet = workbook.createSheet(); + index = 0; + } + Iterator its = data.iterator(); + while (its.hasNext()) { + Object t = its.next(); + try { + index += createCells(patriarch, index, t, excelParams, sheet, workbook, rowHeight, 0)[0]; + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e); + } + } + return this; } + @Override + public Workbook close() { + if (entity.getFreezeCol() != 0) { + sheet.createFreezePane(entity.getFreezeCol(), titleHeight, entity.getFreezeCol(), titleHeight); + } + mergeCells(sheet, excelParams, titleHeight); + // 创建合计信息 + addStatisticsRow(getExcelExportStyler().getStyles(true, null), sheet); + return workbook; + } } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/ExcelToHtmlService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/ExcelToHtmlService.java index be6c3d1..35b01ab 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/ExcelToHtmlService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/ExcelToHtmlService.java @@ -289,7 +289,7 @@ public class ExcelToHtmlService { FileOutputStream fos = null; try { fos = new FileOutputStream(savefile); - fos.write(data); + fos.writer(data); } catch (Exception e) { LOGGER.error(e.getMessage(), e); } finally { diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/StyleHelper.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/StyleHelper.java index 256e8e2..9620848 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/StyleHelper.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/StyleHelper.java @@ -184,7 +184,7 @@ public class StyleHelper { * Outputs the appropriate CSS style for the given cell style. * * @param style The cell style. - * @param out The place to write the output. + * @param out The place to writer the output. */ void colorStyles(CellStyle style, Formatter out); diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/handler/inter/IWriter.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/handler/inter/IWriter.java new file mode 100644 index 0000000..659f248 --- /dev/null +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/handler/inter/IWriter.java @@ -0,0 +1,34 @@ +package cn.afterturn.easypoi.handler.inter; + +import java.util.Collection; + +/** + * 大数据写出服务接口 + * + * @author jueyue on 19-11-25. + */ +public interface IWriter { + /** + * 获取输出对象 + * + * @return + */ + default public T get() { + return null; + } + + /** + * 写入数据 + * + * @param data + * @return + */ + public IWriter writer(Collection data); + + /** + * 关闭流,完成业务 + * + * @return + */ + public T close(); +} diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java index 9906a98..48ee6e5 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java @@ -82,10 +82,10 @@ public class ParseWord07 { if (text != null && text.contains(FOREACH) && text.startsWith(START_STR)) { text = text.replace(FOREACH_NOT_CREATE, EMPTY).replace(FOREACH_AND_SHIFT, EMPTY) .replace(FOREACH, EMPTY).replace(START_STR, EMPTY); - String[] keys = text.replaceAll("\\s{1,}", " ").trim().split(" "); - Object result=PoiPublicUtil.getParamsValue(keys[0], map); + String[] keys = text.replaceAll("\\s{1,}", " ").trim().split(" "); + Object result = PoiPublicUtil.getParamsValue(keys[0], map); //添加list默认值,避免将{{$fe: list t.sn t.hoby t.remark}} 这类标签直接显示出来 - return Objects.nonNull(result)?result:new ArrayList>(0); + return Objects.nonNull(result) ? result : new ArrayList>(0); } return null; } @@ -120,16 +120,16 @@ public class ParseWord07 { * 2013-11-16 */ private void parseThisParagraph(XWPFParagraph paragraph, Map map) throws Exception { - XWPFRun run; + XWPFRun run; // 拿到的第一个run,用来set值,可以保存格式 - XWPFRun currentRun = null; + XWPFRun currentRun = null; // 存放当前的text - String currentText = ""; - String text; + String currentText = ""; + String text; // 判断是不是已经遇到{{ - Boolean isfinde = false; + Boolean isfinde = false; // 存储遇到的run,把他们置空 - List runIndex = new ArrayList(); + List runIndex = new ArrayList(); for (int i = 0; i < paragraph.getRuns().size(); i++) { run = paragraph.getRuns().get(i); text = run.getText(0); @@ -172,7 +172,6 @@ public class ParseWord07 { } - /** * 解析这个表格 * @@ -225,10 +224,10 @@ public class ParseWord07 { * @return */ public XWPFDocument parseWord(String url, List> list) throws Exception { - if (list.size() == 1) { - return parseWord(url, list.get(0)); - } else if (list.size() == 0) { + if (list == null || list.size() == 0) { return null; + } else if (list.size() == 1) { + return parseWord(url, list.get(0)); } else { MyXWPFDocument doc = WordCache.getXWPFDocument(url); parseWordSetValue(doc, list.get(0));