@@ -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(); | |||||
} | |||||
} | } |
@@ -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; | |||||
} | } | ||||
} | } |
@@ -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; | |||||
} | |||||
/** | /** | ||||
* 大数据量导出 | * 大数据量导出 | ||||
* | * | ||||
@@ -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; | |||||
} | |||||
} | } |
@@ -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 { | ||||
@@ -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); | ||||
@@ -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(); | |||||
} |
@@ -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)); | ||||