Browse Source

add iwriter to export bigdata

4.1.3.A
jueyue 5 years ago
parent
commit
7dac1c3a58
8 changed files with 155 additions and 110 deletions
  1. +14
    -25
      easypoi-base/src/main/java/cn/afterturn/easypoi/csv/CsvExportUtil.java
  2. +29
    -38
      easypoi-base/src/main/java/cn/afterturn/easypoi/csv/export/CsvExportService.java
  3. +26
    -0
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/ExcelExportUtil.java
  4. +38
    -32
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelBatchExportService.java
  5. +1
    -1
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/ExcelToHtmlService.java
  6. +1
    -1
      easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/StyleHelper.java
  7. +34
    -0
      easypoi-base/src/main/java/cn/afterturn/easypoi/handler/inter/IWriter.java
  8. +12
    -13
      easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java

+ 14
- 25
easypoi-base/src/main/java/cn/afterturn/easypoi/csv/CsvExportUtil.java View File

@@ -4,6 +4,7 @@ import cn.afterturn.easypoi.csv.entity.CsvExportParams;
import cn.afterturn.easypoi.csv.export.CsvExportService; import cn.afterturn.easypoi.csv.export.CsvExportService;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.afterturn.easypoi.handler.inter.IExcelExportServer; import cn.afterturn.easypoi.handler.inter.IExcelExportServer;
import cn.afterturn.easypoi.handler.inter.IWriter;


import java.io.OutputStream; import java.io.OutputStream;
import java.util.Collection; import java.util.Collection;
@@ -16,7 +17,8 @@ import java.util.List;
*/ */
public final class CsvExportUtil { public final class CsvExportUtil {


private CsvExportService cs;
private CsvExportUtil() {
}




/** /**
@@ -28,10 +30,9 @@ public final class CsvExportUtil {
* @param outputStream * @param outputStream
*/ */
public static void exportCsv(CsvExportParams params, Class<?> pojoClass, Collection<?> dataSet, OutputStream 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 * @param outputStream
*/ */
public static void exportCsv(CsvExportParams params, Class<?> pojoClass, IExcelExportServer server, Object queryParams, OutputStream 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; Collection dataSet;
while ((dataSet = server.selectListForExcelExport(queryParams, page)) != null && dataSet.size() > 0) { while ((dataSet = server.selectListForExcelExport(queryParams, page)) != null && dataSet.size() > 0) {
page++; page++;
ce.write(dataSet);
writer.writer(dataSet);
} }
ce.close();
writer.close();
} }


/** /**
* @param params 表格标题属性 * @param params 表格标题属性
* @param pojoClass Excel对象Class * @param pojoClass Excel对象Class
*/ */
public static CsvExportUtil exportCsv(CsvExportParams params, Class<?> pojoClass, OutputStream outputStream) {
public static IWriter<Void> exportCsv(CsvExportParams params, Class<?> pojoClass, OutputStream outputStream) {
CsvExportUtil ce = new CsvExportUtil(); 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 params 表格标题属性
* @param entityList Map对象列表 * @param entityList Map对象列表
*/ */
public static CsvExportUtil exportCsv(CsvExportParams params, List<ExcelExportEntity> entityList, OutputStream outputStream) {
CsvExportUtil ce = new CsvExportUtil();
ce.cs = new CsvExportService(outputStream, params, entityList);
return ce;
public static IWriter<Void> exportCsv(CsvExportParams params, List<ExcelExportEntity> 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();
}
} }

+ 29
- 38
easypoi-base/src/main/java/cn/afterturn/easypoi/csv/export/CsvExportService.java View File

@@ -7,6 +7,7 @@ import cn.afterturn.easypoi.excel.entity.vo.BaseEntityTypeConstants;
import cn.afterturn.easypoi.excel.export.base.BaseExportService; import cn.afterturn.easypoi.excel.export.base.BaseExportService;
import cn.afterturn.easypoi.exception.excel.ExcelExportException; import cn.afterturn.easypoi.exception.excel.ExcelExportException;
import cn.afterturn.easypoi.exception.excel.enums.ExcelExportEnum; import cn.afterturn.easypoi.exception.excel.enums.ExcelExportEnum;
import cn.afterturn.easypoi.handler.inter.IWriter;
import cn.afterturn.easypoi.util.PoiPublicUtil; import cn.afterturn.easypoi.util.PoiPublicUtil;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder; import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.poi.util.IOUtils; import org.apache.poi.util.IOUtils;
@@ -23,7 +24,7 @@ import java.util.*;
/** /**
* @author by jueyue on 18-11-14. * @author by jueyue on 18-11-14.
*/ */
public class CsvExportService extends BaseExportService {
public class CsvExportService extends BaseExportService implements IWriter<Void> {


private static final Logger LOGGER = LoggerFactory.getLogger(CsvExportService.class); 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"; 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); IOUtils.closeQuietly(this.writer);
return null;
} }
} }

+ 26
- 0
easypoi-base/src/main/java/cn/afterturn/easypoi/excel/ExcelExportUtil.java View File

@@ -23,6 +23,7 @@ import cn.afterturn.easypoi.excel.export.ExcelBatchExportService;
import cn.afterturn.easypoi.excel.export.ExcelExportService; import cn.afterturn.easypoi.excel.export.ExcelExportService;
import cn.afterturn.easypoi.excel.export.template.ExcelExportOfTemplateUtil; import cn.afterturn.easypoi.excel.export.template.ExcelExportOfTemplateUtil;
import cn.afterturn.easypoi.handler.inter.IExcelExportServer; 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.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.streaming.SXSSFWorkbook;
@@ -47,6 +48,31 @@ public final class ExcelExportUtil {
private ExcelExportUtil() { private ExcelExportUtil() {
} }
/**
* 大数据量导出
*
* @param entity 表格标题属性
* @param pojoClass Excel对象Class
*/
public static IWriter<Workbook> exportBigExcel(ExportParams entity, Class<?> pojoClass) {
ExcelBatchExportService batchServer = new ExcelBatchExportService();
batchServer.init(entity, pojoClass);
return batchServer;
}
/**
* 大数据量导出
*
* @param entity
* @param excelParams
* @return
*/
public static IWriter<Workbook> exportBigExcel(ExportParams entity, List<ExcelExportEntity> excelParams) {
ExcelBatchExportService batchServer = new ExcelBatchExportService();
batchServer.init(entity, excelParams);
return batchServer;
}
/** /**
* 大数据量导出 * 大数据量导出
* *


+ 38
- 32
easypoi-base/src/main/java/cn/afterturn/easypoi/excel/export/ExcelBatchExportService.java View File

@@ -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.ExcelExportException;
import cn.afterturn.easypoi.exception.excel.enums.ExcelExportEnum; import cn.afterturn.easypoi.exception.excel.enums.ExcelExportEnum;
import cn.afterturn.easypoi.handler.inter.IExcelExportServer; 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.PoiExcelGraphDataUtil;
import cn.afterturn.easypoi.util.PoiPublicUtil; import cn.afterturn.easypoi.util.PoiPublicUtil;
import org.apache.poi.ss.usermodel.Drawing; import org.apache.poi.ss.usermodel.Drawing;
@@ -26,7 +27,7 @@ import static cn.afterturn.easypoi.excel.ExcelExportUtil.USE_SXSSF_LIMIT;
* @author JueYue * @author JueYue
* 2016年8月29日 * 2016年8月29日
*/ */
public class ExcelBatchExportService extends ExcelExportService {
public class ExcelBatchExportService extends ExcelExportService implements IWriter<Workbook> {
private Workbook workbook; private Workbook workbook;
private Sheet sheet; 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 @Override
protected void insertDataToSheet(Workbook workbook, ExportParams entity, protected void insertDataToSheet(Workbook workbook, ExportParams entity,
List<ExcelExportEntity> entityList, Collection<?> dataSet, List<ExcelExportEntity> 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) { public Workbook exportBigExcel(IExcelExportServer server, Object queryParams) {
int page = 1; int page = 1;
List<Object> list = server List<Object> list = server
.selectListForExcelExport(queryParams, page++); .selectListForExcelExport(queryParams, page++);
while (list != null && list.size() > 0) { while (list != null && list.size() > 0) {
appendData(list);
writer(list);
list = server.selectListForExcelExport(queryParams, page++); list = server.selectListForExcelExport(queryParams, page++);
} }
return closeExportBigExcel();
return close();
}
@Override
public Workbook get() {
return this.workbook;
}
@Override
public IWriter<Workbook> 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;
}
} }

+ 1
- 1
easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/ExcelToHtmlService.java View File

@@ -289,7 +289,7 @@ public class ExcelToHtmlService {
FileOutputStream fos = null; FileOutputStream fos = null;
try { try {
fos = new FileOutputStream(savefile); fos = new FileOutputStream(savefile);
fos.write(data);
fos.writer(data);
} catch (Exception e) { } catch (Exception e) {
LOGGER.error(e.getMessage(), e); LOGGER.error(e.getMessage(), e);
} finally { } finally {


+ 1
- 1
easypoi-base/src/main/java/cn/afterturn/easypoi/excel/html/helper/StyleHelper.java View File

@@ -184,7 +184,7 @@ public class StyleHelper {
* Outputs the appropriate CSS style for the given cell style. * Outputs the appropriate CSS style for the given cell style.
* *
* @param style The 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); void colorStyles(CellStyle style, Formatter out);




+ 34
- 0
easypoi-base/src/main/java/cn/afterturn/easypoi/handler/inter/IWriter.java View File

@@ -0,0 +1,34 @@
package cn.afterturn.easypoi.handler.inter;

import java.util.Collection;

/**
* 大数据写出服务接口
*
* @author jueyue on 19-11-25.
*/
public interface IWriter<T> {
/**
* 获取输出对象
*
* @return
*/
default public T get() {
return null;
}

/**
* 写入数据
*
* @param data
* @return
*/
public IWriter<T> writer(Collection data);

/**
* 关闭流,完成业务
*
* @return
*/
public T close();
}

+ 12
- 13
easypoi-base/src/main/java/cn/afterturn/easypoi/word/parse/ParseWord07.java View File

@@ -82,10 +82,10 @@ public class ParseWord07 {
if (text != null && text.contains(FOREACH) && text.startsWith(START_STR)) { if (text != null && text.contains(FOREACH) && text.startsWith(START_STR)) {
text = text.replace(FOREACH_NOT_CREATE, EMPTY).replace(FOREACH_AND_SHIFT, EMPTY) text = text.replace(FOREACH_NOT_CREATE, EMPTY).replace(FOREACH_AND_SHIFT, EMPTY)
.replace(FOREACH, EMPTY).replace(START_STR, 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}} 这类标签直接显示出来 //添加list默认值,避免将{{$fe: list t.sn t.hoby t.remark}} 这类标签直接显示出来
return Objects.nonNull(result)?result:new ArrayList<Map<String,Object>>(0);
return Objects.nonNull(result) ? result : new ArrayList<Map<String, Object>>(0);
} }
return null; return null;
} }
@@ -120,16 +120,16 @@ public class ParseWord07 {
* 2013-11-16 * 2013-11-16
*/ */
private void parseThisParagraph(XWPFParagraph paragraph, Map<String, Object> map) throws Exception { private void parseThisParagraph(XWPFParagraph paragraph, Map<String, Object> map) throws Exception {
XWPFRun run;
XWPFRun run;
// 拿到的第一个run,用来set值,可以保存格式 // 拿到的第一个run,用来set值,可以保存格式
XWPFRun currentRun = null;
XWPFRun currentRun = null;
// 存放当前的text // 存放当前的text
String currentText = "";
String text;
String currentText = "";
String text;
// 判断是不是已经遇到{{ // 判断是不是已经遇到{{
Boolean isfinde = false;
Boolean isfinde = false;
// 存储遇到的run,把他们置空 // 存储遇到的run,把他们置空
List<Integer> runIndex = new ArrayList<Integer>();
List<Integer> runIndex = new ArrayList<Integer>();
for (int i = 0; i < paragraph.getRuns().size(); i++) { for (int i = 0; i < paragraph.getRuns().size(); i++) {
run = paragraph.getRuns().get(i); run = paragraph.getRuns().get(i);
text = run.getText(0); text = run.getText(0);
@@ -172,7 +172,6 @@ public class ParseWord07 {
} }
/** /**
* 解析这个表格 * 解析这个表格
* *
@@ -225,10 +224,10 @@ public class ParseWord07 {
* @return * @return
*/ */
public XWPFDocument parseWord(String url, List<Map<String, Object>> list) throws Exception { public XWPFDocument parseWord(String url, List<Map<String, Object>> 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; return null;
} else if (list.size() == 1) {
return parseWord(url, list.get(0));
} else { } else {
MyXWPFDocument doc = WordCache.getXWPFDocument(url); MyXWPFDocument doc = WordCache.getXWPFDocument(url);
parseWordSetValue(doc, list.get(0)); parseWordSetValue(doc, list.get(0));


Loading…
Cancel
Save