Browse Source

临时测试

test
Jiaju Zhuang 3 years ago
parent
commit
73185a398a
  1. 177
      src/main/java/com/alibaba/excel/util/WriteHandlerUtils.java
  2. 3
      src/main/java/com/alibaba/excel/write/executor/ExcelWriteAddExecutor.java
  3. 52
      src/main/java/com/alibaba/excel/write/handler/CellHandlerExecutionChain.java
  4. 6
      src/main/java/com/alibaba/excel/write/handler/DefaultWriteHandlerLoader.java
  5. 3
      src/main/java/com/alibaba/excel/write/handler/WriteHandler.java
  6. 7
      src/main/java/com/alibaba/excel/write/handler/context/CellWriteHandlerContext.java
  7. 2
      src/main/java/com/alibaba/excel/write/handler/impl/FillStyleCellWriteHandler.java
  8. 46
      src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java
  9. 8
      src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java
  10. 18
      src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java
  11. 3
      src/main/java/com/alibaba/excel/write/metadata/style/WriteCellStyle.java
  12. 3
      src/main/java/com/alibaba/excel/write/style/HorizontalCellStyleStrategy.java
  13. 237
      src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataTest.java

177
src/main/java/com/alibaba/excel/util/WriteHandlerUtils.java

@ -6,6 +6,7 @@ import java.util.Map;
import com.alibaba.excel.context.WriteContext;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.alibaba.excel.write.handler.CellHandlerExecutionChain;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.handler.RowWriteHandler;
import com.alibaba.excel.write.handler.SheetWriteHandler;
@ -16,9 +17,6 @@ import com.alibaba.excel.write.handler.context.RowWriteHandlerContext;
import com.alibaba.excel.write.handler.context.SheetWriteHandlerContext;
import com.alibaba.excel.write.handler.context.WorkbookWriteHandlerContext;
import com.alibaba.excel.write.handler.impl.DefaultRowWriteHandler;
import com.alibaba.excel.write.handler.impl.FillStyleCellWriteHandler;
import com.alibaba.excel.write.metadata.holder.AbstractWriteHolder;
import com.alibaba.excel.write.style.DefaultStyle;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
@ -151,72 +149,153 @@ public class WriteHandlerUtils {
public static CellWriteHandlerContext createCellWriteHandlerContext(WriteContext writeContext, Row row,
Integer rowIndex, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead,
ExcelContentProperty excelContentProperty) {
List<WriteHandler> handlerList = writeContext.currentWriteHolder().writeHandlerMap().get(
CellHandlerExecutionChain heade = writeContext.currentWriteHolder().writeHandlerMap2().get(
CellWriteHandler.class);
return new CellWriteHandlerContext(writeContext, writeContext.writeWorkbookHolder(),
CellWriteHandlerContext context = new CellWriteHandlerContext(writeContext, writeContext.writeWorkbookHolder(),
writeContext.writeSheetHolder(), writeContext.writeTableHolder(), row, rowIndex, null, columnIndex,
relativeRowIndex, head, null, null, isHead, excelContentProperty, handlerList);
relativeRowIndex, head, null, null, isHead, excelContentProperty,
writeContext.currentWriteHolder().writeHandlerMap().get(
CellWriteHandler.class));
context.setCellHandlerExecutionChain(heade);
return context;
}
public static void beforeCellCreate(CellWriteHandlerContext context) {
List<WriteHandler> handlerList = context.getHandlerList();
DefaultStyle.defaultStyle.beforeCellCreate(context);
AbstractWriteHolder.abstractVerticalCellStyleStrategy.beforeCellCreate(context);
if (CollectionUtils.isNotEmpty(handlerList)) {
CostUtil.count++;
for (WriteHandler writeHandler : handlerList) {
context.getCellHandlerExecutionChain().beforeCellCreate(context);
((CellWriteHandler)writeHandler).beforeCellCreate(context);
}
}
FillStyleCellWriteHandler.fillStyleCellWriteHandler.beforeCellCreate(context);
}
public static void afterCellCreate(CellWriteHandlerContext context) {
List<WriteHandler> handlerList = context.getHandlerList();
DefaultStyle.defaultStyle.afterCellCreate(context);
AbstractWriteHolder.abstractVerticalCellStyleStrategy.afterCellCreate(context);
if (CollectionUtils.isNotEmpty(handlerList)) {
CostUtil.count++;
for (WriteHandler writeHandler : handlerList) {
((CellWriteHandler)writeHandler).afterCellCreate(context);
}
}
FillStyleCellWriteHandler.fillStyleCellWriteHandler.afterCellCreate(context);
context.getCellHandlerExecutionChain().afterCellCreate(context);
}
public static void afterCellDataConverted(CellWriteHandlerContext context) {
List<WriteHandler> handlerList = context.getHandlerList();
DefaultStyle.defaultStyle.afterCellDataConverted(context);
AbstractWriteHolder.abstractVerticalCellStyleStrategy.afterCellDataConverted(context);
if (CollectionUtils.isNotEmpty(handlerList)) {
CostUtil.count++;
for (WriteHandler writeHandler : handlerList) {
((CellWriteHandler)writeHandler).afterCellDataConverted(context);
}
}
FillStyleCellWriteHandler.fillStyleCellWriteHandler.afterCellDataConverted(context);
context.getCellHandlerExecutionChain().afterCellDataConverted(context);
}
public static void afterCellDispose(CellWriteHandlerContext context) {
List<WriteHandler> handlerList = context.getHandlerList();
DefaultStyle.defaultStyle.afterCellDispose(context);
AbstractWriteHolder.abstractVerticalCellStyleStrategy.afterCellDispose(context);
if (CollectionUtils.isNotEmpty(handlerList)) {
CostUtil.count++;
for (WriteHandler writeHandler : handlerList) {
((CellWriteHandler)writeHandler).afterCellDispose(context);
}
}
FillStyleCellWriteHandler.fillStyleCellWriteHandler.afterCellDispose(context);
context.getCellHandlerExecutionChain().afterCellDispose(context);
}
//public static void beforeCellCreate(CellWriteHandlerContext context) {
//
// List<WriteHandler> handlerList = context.getHandlerList();
// if (CollectionUtils.isNotEmpty(handlerList)) {
// CostUtil.count++;
//
// for (WriteHandler writeHandler : handlerList) {
//
// ((CellWriteHandler)writeHandler).beforeCellCreate(context);
// }
// }
//}
//
//public static void afterCellCreate(CellWriteHandlerContext context) {
//
// List<WriteHandler> handlerList = context.getHandlerList();
// if (CollectionUtils.isNotEmpty(handlerList)) {
// CostUtil.count++;
//
// for (WriteHandler writeHandler : handlerList) {
//
// ((CellWriteHandler)writeHandler).afterCellCreate(context);
// }
// }
//
//}
//
//public static void afterCellDataConverted(CellWriteHandlerContext context) {
//
// List<WriteHandler> handlerList = context.getHandlerList();
// if (CollectionUtils.isNotEmpty(handlerList)) {
// CostUtil.count++;
// for (WriteHandler writeHandler : handlerList) {
// ((CellWriteHandler)writeHandler).afterCellDataConverted(context);
// }
// }
//
//}
//
//public static void afterCellDispose(CellWriteHandlerContext context) {
// List<WriteHandler> handlerList = context.getHandlerList();
// if (CollectionUtils.isNotEmpty(handlerList)) {
// CostUtil.count++;
// for (WriteHandler writeHandler : handlerList) {
// ((CellWriteHandler)writeHandler).afterCellDispose(context);
// }
// }
//}
//
//public static void beforeCellCreate(CellWriteHandlerContext context) {
//
// context.getCellHandlerExecutionChain().beforeCellCreate(context);
//
// //List<WriteHandler> handlerList = context.getHandlerList();
// //DefaultStyle.defaultStyle.beforeCellCreate(context);
// //AbstractWriteHolder.abstractVerticalCellStyleStrategy.beforeCellCreate(context);
// //if (CollectionUtils.isNotEmpty(handlerList)) {
// // CostUtil.count++;
// //
// // for (WriteHandler writeHandler : handlerList) {
// //
// // ((CellWriteHandler)writeHandler).beforeCellCreate(context);
// // }
// //}
// //FillStyleCellWriteHandler.fillStyleCellWriteHandler.beforeCellCreate(context);
//}
//
//public static void afterCellCreate(CellWriteHandlerContext context) {
// context.getCellHandlerExecutionChain().afterCellCreate(context);
//
// //List<WriteHandler> handlerList = context.getHandlerList();
// //DefaultStyle.defaultStyle.afterCellCreate(context);
// //AbstractWriteHolder.abstractVerticalCellStyleStrategy.afterCellCreate(context);
// //if (CollectionUtils.isNotEmpty(handlerList)) {
// // CostUtil.count++;
// //
// // for (WriteHandler writeHandler : handlerList) {
// //
// // ((CellWriteHandler)writeHandler).afterCellCreate(context);
// // }
// //}
// //FillStyleCellWriteHandler.fillStyleCellWriteHandler.afterCellCreate(context);
//
//}
//
//public static void afterCellDataConverted(CellWriteHandlerContext context) {
// context.getCellHandlerExecutionChain().afterCellDataConverted(context);
//
// //List<WriteHandler> handlerList = context.getHandlerList();
// ////DefaultStyle.defaultStyle.afterCellDataConverted(context);
// ////AbstractWriteHolder.abstractVerticalCellStyleStrategy.afterCellDataConverted(context);
// //if (CollectionUtils.isNotEmpty(handlerList)) {
// // CostUtil.count++;
// // for (WriteHandler writeHandler : handlerList) {
// // ((CellWriteHandler)writeHandler).afterCellDataConverted(context);
// // }
// //}
// //FillStyleCellWriteHandler.fillStyleCellWriteHandler.afterCellDataConverted(context);
//
//}
//
//public static void afterCellDispose(CellWriteHandlerContext context) {
// context.getCellHandlerExecutionChain().afterCellDispose(context);
// //List<WriteHandler> handlerList = context.getHandlerList();
// //DefaultStyle.defaultStyle.afterCellDispose(context);
// ////AbstractWriteHolder.abstractVerticalCellStyleStrategy.afterCellDispose(context);
// //if (CollectionUtils.isNotEmpty(handlerList)) {
// // CostUtil.count++;
// // for (WriteHandler writeHandler : handlerList) {
// // ((CellWriteHandler)writeHandler).afterCellDispose(context);
// // }
// //}
// //FillStyleCellWriteHandler.fillStyleCellWriteHandler.afterCellDispose(context);
//}
public static RowWriteHandlerContext createRowWriteHandlerContext(WriteContext writeContext, Integer rowIndex,
Integer relativeRowIndex, Boolean isHead) {
List<WriteHandler> handlerList = writeContext.currentWriteHolder().writeHandlerMap().get(

3
src/main/java/com/alibaba/excel/write/executor/ExcelWriteAddExecutor.java

@ -142,6 +142,7 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor {
Map<Integer, Field> sortedAllFiledMap) {
WriteHolder currentWriteHolder = writeContext.currentWriteHolder();
BeanMap beanMap = BeanMapUtils.create(oneRowData);
Set<String> keySet = new HashSet<>(beanMap.keySet());
Set<String> beanMapHandledSet = new HashSet<>();
int maxCellIndex = -1;
// If it's a class it needs to be cast by type
@ -151,7 +152,7 @@ public class ExcelWriteAddExecutor extends AbstractExcelWriteExecutor {
int columnIndex = entry.getKey();
Head head = entry.getValue();
String name = head.getFieldName();
if (!beanMap.containsKey(name)) {
if (!keySet.contains(name)) {
continue;
}

52
src/main/java/com/alibaba/excel/write/handler/CellHandlerExecutionChain.java

@ -0,0 +1,52 @@
package com.alibaba.excel.write.handler;
import com.alibaba.excel.write.handler.context.CellWriteHandlerContext;
import lombok.Data;
@Data
public class CellHandlerExecutionChain {
private CellHandlerExecutionChain next;
private CellWriteHandler handler;
public CellHandlerExecutionChain(CellWriteHandler handler) {
this.handler = handler;
}
public void beforeCellCreate(CellWriteHandlerContext context) {
this.handler.beforeCellCreate(context);
if (this.next != null) {
this.next.beforeCellCreate(context);
}
}
public void afterCellCreate(CellWriteHandlerContext context) {
this.handler.afterCellCreate(context);
if (this.next != null) {
this.next.afterCellCreate(context);
}
}
public void afterCellDataConverted(CellWriteHandlerContext context) {
this.handler.afterCellDataConverted(context);
if (this.next != null) {
this.next.afterCellDataConverted(context);
}
}
public void afterCellDispose(CellWriteHandlerContext context) {
this.handler.afterCellDispose(context);
if (this.next != null) {
this.next.afterCellDispose(context);
}
}
public void addLast(CellWriteHandler handler) {
CellHandlerExecutionChain context = this;
while (context.next != null) {
context = context.next;
}
context.next = new CellHandlerExecutionChain(handler);
}
}

6
src/main/java/com/alibaba/excel/write/handler/DefaultWriteHandlerLoader.java

@ -5,6 +5,8 @@ import java.util.List;
import com.alibaba.excel.write.handler.impl.DefaultRowWriteHandler;
import com.alibaba.excel.write.handler.impl.DimensionWorkbookWriteHandler;
import com.alibaba.excel.write.handler.impl.FillStyleCellWriteHandler;
import com.alibaba.excel.write.style.DefaultStyle;
/**
* Load default handler
@ -18,7 +20,7 @@ public class DefaultWriteHandlerLoader {
static {
DEFAULT_WRITE_HANDLER_LIST.add(new DimensionWorkbookWriteHandler());
DEFAULT_WRITE_HANDLER_LIST.add(new DefaultRowWriteHandler());
//DEFAULT_WRITE_HANDLER_LIST.add(new FillStyleCellWriteHandler());
DEFAULT_WRITE_HANDLER_LIST.add(new FillStyleCellWriteHandler());
}
/**
@ -29,7 +31,7 @@ public class DefaultWriteHandlerLoader {
public static List<WriteHandler> loadDefaultHandler(Boolean useDefaultStyle) {
List<WriteHandler> handlerList = new ArrayList<>();
if (useDefaultStyle) {
//handlerList.add(new DefaultStyle());
handlerList.add(new DefaultStyle());
}
handlerList.addAll(DEFAULT_WRITE_HANDLER_LIST);
return handlerList;

3
src/main/java/com/alibaba/excel/write/handler/WriteHandler.java

@ -7,4 +7,5 @@ import com.alibaba.excel.event.Handler;
*
* @author Jiaju Zhuang
*/
public interface WriteHandler extends Handler {}
public interface WriteHandler extends Handler {
}

7
src/main/java/com/alibaba/excel/write/handler/context/CellWriteHandlerContext.java

@ -7,6 +7,7 @@ import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.Head;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.alibaba.excel.write.handler.CellHandlerExecutionChain;
import com.alibaba.excel.write.handler.WriteHandler;
import com.alibaba.excel.write.handler.impl.FillStyleCellWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
@ -111,6 +112,12 @@ public class CellWriteHandlerContext {
*/
private List<WriteHandler> handlerList;
private CellHandlerExecutionChain cellHandlerExecutionChain;
public CellWriteHandlerContext(){
}
public CellWriteHandlerContext(WriteContext writeContext,
WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder,
WriteTableHolder writeTableHolder, Row row, Integer rowIndex, Cell cell, Integer columnIndex,

2
src/main/java/com/alibaba/excel/write/handler/impl/FillStyleCellWriteHandler.java

@ -30,7 +30,7 @@ public class FillStyleCellWriteHandler implements CellWriteHandler {
@Override
public void beforeCellCreate(CellWriteHandlerContext context) {
//count++;
}
@Override

46
src/main/java/com/alibaba/excel/write/metadata/holder/AbstractWriteHolder.java

@ -22,6 +22,8 @@ import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.alibaba.excel.metadata.property.LoopMergeProperty;
import com.alibaba.excel.metadata.property.OnceAbsoluteMergeProperty;
import com.alibaba.excel.metadata.property.RowHeightProperty;
import com.alibaba.excel.util.MapUtils;
import com.alibaba.excel.write.handler.CellHandlerExecutionChain;
import com.alibaba.excel.write.handler.CellWriteHandler;
import com.alibaba.excel.write.handler.DefaultWriteHandlerLoader;
import com.alibaba.excel.write.handler.RowWriteHandler;
@ -66,6 +68,10 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
* Write handler
*/
private Map<Class<? extends WriteHandler>, List<WriteHandler>> writeHandlerMap;
/**
* Write handler
*/
private Map<Class<? extends WriteHandler>, CellHandlerExecutionChain> writeHandlerMap2;
/**
* Own write handler.Created in the sheet in the workbook interceptors will not be executed because the workbook to
* create an event long past. So when initializing sheet, supplementary workbook event.
@ -189,6 +195,39 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
}
this.writeHandlerMap = sortAndClearUpAllHandler(handlerList, parentWriteHandlerMap);
List<WriteHandler> cc = writeHandlerMap.get(CellWriteHandler.class);
writeHandlerMap2= MapUtils.newHashMap();
if (CollectionUtils.isNotEmpty(cc)) {
CellHandlerExecutionChain headChain = new CellHandlerExecutionChain(new CellWriteHandler() {
@Override
public void beforeCellCreate(CellWriteHandlerContext context) {
}
@Override
public void afterCellCreate(CellWriteHandlerContext context) {
}
@Override
public void afterCellDataConverted(CellWriteHandlerContext context) {
}
@Override
public void afterCellDispose(CellWriteHandlerContext context) {
}
});
writeHandlerMap2.put(CellWriteHandler.class, headChain);
for (WriteHandler writeHandler : cc) {
headChain.addLast((CellWriteHandler)writeHandler);
}
}
// Set converterMap
if (parentAbstractWriteHolder == null) {
setConverterMap(DefaultConverterLoader.loadDefaultWriteConverter());
@ -275,7 +314,7 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
}
};
//abstractVerticalCellStyleStrategy = styleStrategy;
//handlerList.add(abstractVerticalCellStyleStrategy);
handlerList.add(abstractVerticalCellStyleStrategy);
}
private void dealLoopMerge(List<WriteHandler> handlerList, Head head) {
@ -444,6 +483,11 @@ public abstract class AbstractWriteHolder extends AbstractHolder implements Writ
return getWriteHandlerMap();
}
@Override
public Map<Class<? extends WriteHandler>, CellHandlerExecutionChain> writeHandlerMap2() {
return getWriteHandlerMap2();
}
@Override
public Map<Class<? extends WriteHandler>, List<WriteHandler>> ownWriteHandlerMap() {
return getOwnWriteHandlerMap();

8
src/main/java/com/alibaba/excel/write/metadata/holder/WriteHolder.java

@ -4,6 +4,7 @@ import java.util.List;
import java.util.Map;
import com.alibaba.excel.metadata.ConfigurationHolder;
import com.alibaba.excel.write.handler.CellHandlerExecutionChain;
import com.alibaba.excel.write.handler.WriteHandler;
import com.alibaba.excel.write.property.ExcelWriteHeadProperty;
@ -28,6 +29,13 @@ public interface WriteHolder extends ConfigurationHolder {
*/
Map<Class<? extends WriteHandler>, List<WriteHandler>> writeHandlerMap();
/**
* What handler does the currently operated cell need to execute
*
* @return
*/
Map<Class<? extends WriteHandler>, CellHandlerExecutionChain> writeHandlerMap2();
/**
* create your own write handler.
*

18
src/main/java/com/alibaba/excel/write/metadata/holder/WriteWorkbookHolder.java

@ -43,6 +43,8 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@Data
@Slf4j
public class WriteWorkbookHolder extends AbstractWriteHolder {
public static int count = 0;
/***
* Current poi Workbook.This is only for writing, and there may be no data in version 07 when template data needs to
* be read.
@ -248,6 +250,8 @@ public class WriteWorkbookHolder extends AbstractWriteHolder {
return HolderEnum.WORKBOOK;
}
private static Map<Integer, CellStyle> map2 = MapUtils.newHashMap();
/**
* create a cell style.
*
@ -259,9 +263,6 @@ public class WriteWorkbookHolder extends AbstractWriteHolder {
if (writeCellStyle == null) {
return originCellStyle;
}
WriteCellStyle tempWriteCellStyle = new WriteCellStyle();
WriteCellStyle.merge(writeCellStyle, tempWriteCellStyle);
short styleIndex = -1;
Font originFont = null;
boolean useCache = true;
@ -274,13 +275,20 @@ public class WriteWorkbookHolder extends AbstractWriteHolder {
}
useCache = false;
}
Map<WriteCellStyle, CellStyle> cellStyleMap = cellStyleIndexMap.computeIfAbsent(styleIndex,
key -> MapUtils.newHashMap());
CellStyle cellStyle = cellStyleMap.get(tempWriteCellStyle);
//CellStyle cellStyle = map2.get(writeCellStyle.hashCode());
//if (cellStyle != null) {
// return cellStyle;
//}
CellStyle cellStyle = cellStyleMap.get(writeCellStyle);
count++;
if (cellStyle != null) {
return cellStyle;
}
WriteCellStyle tempWriteCellStyle = new WriteCellStyle();
WriteCellStyle.merge(writeCellStyle, tempWriteCellStyle);
if (log.isDebugEnabled()) {
log.info("create new style:{},{}", tempWriteCellStyle, originCellStyle);
}

3
src/main/java/com/alibaba/excel/write/metadata/style/WriteCellStyle.java

@ -353,4 +353,7 @@ public class WriteCellStyle {
}
public int nativeHashCode() {
return super.hashCode();
}
}

3
src/main/java/com/alibaba/excel/write/style/HorizontalCellStyleStrategy.java

@ -17,6 +17,7 @@ import org.apache.commons.collections4.CollectionUtils;
*/
@Data
public class HorizontalCellStyleStrategy extends AbstractCellStyleStrategy {
public static int count=0;
private WriteCellStyle headWriteCellStyle;
private List<WriteCellStyle> contentWriteCellStyleList;
@ -67,7 +68,7 @@ public class HorizontalCellStyleStrategy extends AbstractCellStyleStrategy {
@Override
public void beforeCellCreate(CellWriteHandlerContext context) {
//count++;
}
@Override

237
src/test/java/com/alibaba/easyexcel/test/core/large/LargeDataTest.java

@ -3,20 +3,23 @@ package com.alibaba.easyexcel.test.core.large;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.alibaba.easyexcel.test.util.TestFileUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.util.CostUtil;
import com.alibaba.excel.write.handler.WriteHandler;
import com.alibaba.excel.write.handler.context.CellWriteHandlerContext;
import com.alibaba.excel.write.handler.impl.FillStyleCellWriteHandler;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.FixMethodOrder;
import org.junit.Test;
@ -85,6 +88,54 @@ public class LargeDataTest {
LOGGER.info("CSV large data total time spent:{}", System.currentTimeMillis() - start);
}
@Test
public void t04Write666() throws Exception {
long start = System.currentTimeMillis();
ExcelWriter excelWriter = EasyExcel.write(fileWrite07, LargeData.class).build();
WriteSheet writeSheet = EasyExcel.writerSheet().build();
for (int j = 0; j < 2; j++) {
excelWriter.write(data(), writeSheet);
LOGGER.info("{} write success.", j);
}
excelWriter.finish();
long cost = System.currentTimeMillis() - start;
LOGGER.info("write cost:{}", cost);
start = System.currentTimeMillis();
excelWriter = EasyExcel.write(fileWrite07, LargeData.class).build();
writeSheet = EasyExcel.writerSheet().build();
for (int j = 0; j < 100; j++) {
excelWriter.write(data(), writeSheet);
LOGGER.info("{} write success.", j);
}
excelWriter.finish();
cost = System.currentTimeMillis() - start;
LOGGER.info("write cost:{}", cost);
start = System.currentTimeMillis();
try (FileOutputStream fileOutputStream = new FileOutputStream(fileWritePoi07)) {
SXSSFWorkbook workbook = new SXSSFWorkbook();
SXSSFSheet sheet = workbook.createSheet("sheet1");
for (int i = 0; i < 100 * 5000; i++) {
SXSSFRow row = sheet.createRow(i);
for (int j = 0; j < 25; j++) {
SXSSFCell cell = row.createCell(j);
cell.setCellValue("str-" + j + "-" + i);
}
if (i % 5000 == 0) {
LOGGER.info("{} write success.", i);
}
}
workbook.write(fileOutputStream);
workbook.dispose();
workbook.close();
}
long costPoi = System.currentTimeMillis() - start;
LOGGER.info("poi write cost:{}", System.currentTimeMillis() - start);
LOGGER.info("{} vs {}", cost, costPoi);
Assert.assertTrue(costPoi * 3 > cost);
}
@Test
public void t04Write44() throws Exception {
//read();
@ -132,82 +183,88 @@ public class LargeDataTest {
@Test
public void t04Write() throws Exception {
Cellhanderl cellhanderl1 = new Cellhanderl();
Cellhanderl cellhanderl2 = new Cellhanderl();
Cellhanderl cellhanderl3 = new Cellhanderl();
Cellhanderl cellhanderl4 = new Cellhanderl();
List<Cellhanderl> list = new ArrayList<>();
WriteHandler cellhanderl1 = new Cellhanderl();
WriteHandler cellhanderl2 = new Cellhanderl();
WriteHandler cellhanderl3 = new Cellhanderl();
WriteHandler cellhanderl4 = new Cellhanderl();
List<WriteHandler> list = new ArrayList<>();
list.add(cellhanderl1);
list.add(cellhanderl2);
list.add(cellhanderl3);
//list.add(cellhanderl4);
long start = System.currentTimeMillis();
for (int i = 0; i < 25000075; i++) {
for (int i = 0; i < 6250025; i++) {
CellWriteHandlerContext content=new CellWriteHandlerContext();
content.setColumnIndex(99);
for (int j = 0; j < list.size(); j++) {
Cellhanderl writeHandler = list.get(0);
writeHandler.beforeCellCreate(null);
writeHandler.afterCellCreate(null);
writeHandler.afterCellDataConverted(null);
writeHandler.afterCellDispose(null);
WriteHandler writeHandler = list.get(0);
((Cellhanderl)writeHandler).beforeCellCreate(content);
((Cellhanderl)writeHandler).afterCellCreate(content);
((Cellhanderl)writeHandler).afterCellDataConverted(content);
((Cellhanderl)writeHandler).afterCellDispose(content);
}
}
LOGGER.info("第一次:{}", System.currentTimeMillis() - start);
start = System.currentTimeMillis();
for (int i = 0; i < 25000075; i++) {
for (Cellhanderl writeHandler : list) {
writeHandler.beforeCellCreate(null);
writeHandler.afterCellCreate(null);
writeHandler.afterCellDataConverted(null);
writeHandler.afterCellDispose(null);
for (int i = 0; i < 6250025; i++) {
CellWriteHandlerContext content=new CellWriteHandlerContext();
content.setColumnIndex(99);
for (WriteHandler writeHandler : list) {
((Cellhanderl)writeHandler).beforeCellCreate(content);
((Cellhanderl)writeHandler).afterCellCreate(content);
((Cellhanderl)writeHandler).afterCellDataConverted(content);
((Cellhanderl)writeHandler).afterCellDispose(content);
}
}
LOGGER.info("第二次:{}", System.currentTimeMillis() - start);
start = System.currentTimeMillis();
for (int i = 0; i < 25000075; i++) {
cellhanderl1.beforeCellCreate(null);
cellhanderl1.afterCellCreate(null);
cellhanderl1.afterCellDataConverted(null);
cellhanderl1.afterCellDispose(null);
cellhanderl2.beforeCellCreate(null);
cellhanderl2.afterCellCreate(null);
cellhanderl2.afterCellDataConverted(null);
cellhanderl2.afterCellDispose(null);
cellhanderl3.beforeCellCreate(null);
cellhanderl3.afterCellCreate(null);
cellhanderl3.afterCellDataConverted(null);
cellhanderl3.afterCellDispose(null);
}
LOGGER.info("第三次:{}", System.currentTimeMillis() - start);
start = System.currentTimeMillis();
for (int i = 0; i < 25000075; i++) {
Iterator<Cellhanderl> iterator = list.iterator();
while (iterator.hasNext()) {
Cellhanderl writeHandler = iterator.next();
writeHandler.beforeCellCreate(null);
writeHandler.afterCellCreate(null);
writeHandler.afterCellDataConverted(null);
writeHandler.afterCellDispose(null);
}
}
LOGGER.info("第四次:{}", System.currentTimeMillis() - start);
start = System.currentTimeMillis();
for (int i = 0; i < 25000075; i++) {
list.stream().forEach(writeHandler->{
writeHandler.beforeCellCreate(null);
writeHandler.afterCellCreate(null);
writeHandler.afterCellDataConverted(null);
writeHandler.afterCellDispose(null);
});
}
LOGGER.info("第五次:{}", System.currentTimeMillis() - start);
//
//start = System.currentTimeMillis();
//for (int i = 0; i < 6250025; i++) {
// cellhanderl1.beforeCellCreate(null);
// cellhanderl1.afterCellCreate(null);
// cellhanderl1.afterCellDataConverted(null);
// cellhanderl1.afterCellDispose(null);
// cellhanderl2.beforeCellCreate(null);
// cellhanderl2.afterCellCreate(null);
// cellhanderl2.afterCellDataConverted(null);
// cellhanderl2.afterCellDispose(null);
// cellhanderl3.beforeCellCreate(null);
// cellhanderl3.afterCellCreate(null);
// cellhanderl3.afterCellDataConverted(null);
// cellhanderl3.afterCellDispose(null);
//
//}
//LOGGER.info("第三次:{}", System.currentTimeMillis() - start);
//
//start = System.currentTimeMillis();
//for (int i = 0; i < 25000075; i++) {
// Iterator<Cellhanderl> iterator = list.iterator();
// while (iterator.hasNext()) {
// Cellhanderl writeHandler = iterator.next();
// writeHandler.beforeCellCreate(null);
// writeHandler.afterCellCreate(null);
// writeHandler.afterCellDataConverted(null);
// writeHandler.afterCellDispose(null);
// }
//}
//
//LOGGER.info("第四次:{}", System.currentTimeMillis() - start);
//
//start = System.currentTimeMillis();
//for (int i = 0; i < 25000075; i++) {
// list.stream().forEach(writeHandler -> {
// writeHandler.beforeCellCreate(null);
// writeHandler.afterCellCreate(null);
// writeHandler.afterCellDataConverted(null);
// writeHandler.afterCellDispose(null);
// });
//}
//
//LOGGER.info("第五次:{}", System.currentTimeMillis() - start);
}
private void v2(Cellhanderl cellhanderl1) {
@ -217,25 +274,45 @@ public class LargeDataTest {
cellhanderl1.afterCellDispose(null);
}
@Test
public void t04Writev32() throws Exception {
//System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "/Users/zhuangjiaju/test");
//read();
Thread.sleep(10*1000);
read();
}
@Test
public void t04Writev33() throws Exception {
//read();
//Thread.sleep(10*1000);
read();
}
private void read() throws Exception {
long start = System.currentTimeMillis();
try (FileOutputStream fileOutputStream = new FileOutputStream(fileWritePoi07)) {
SXSSFWorkbook workbook = new SXSSFWorkbook();
SXSSFSheet sheet = workbook.createSheet("sheet1");
for (int i = 0; i < 20 * 5000; i++) {
SXSSFRow row = sheet.createRow(i);
for (int j = 0; j < 25; j++) {
SXSSFCell cell = row.createCell(j);
cell.setCellValue("str-" + j + "-" + i);
}
if (i % 5000 == 0) {
//LOGGER.info("{} write success.", i);
}
}
workbook.write(fileOutputStream);
workbook.dispose();
workbook.close();
}
//try (FileOutputStream fileOutputStream = new FileOutputStream(fileWritePoi07)) {
// SXSSFWorkbook workbook = new SXSSFWorkbook();
// SXSSFSheet sheet = workbook.createSheet("sheet1");
// for (int i = 0; i < 20 * 5000; i++) {
// SXSSFRow row = sheet.createRow(i);
// for (int j = 0; j < 25; j++) {
// SXSSFCell cell = row.createCell(j);
// cell.setCellValue("str-" + j + "-" + i);
// }
// if (i % 5000 == 0) {
// //LOGGER.info("{} write success.", i);
// }
// }
// workbook.write(fileOutputStream);
// workbook.dispose();
// workbook.close();
//}
long costPoi = System.currentTimeMillis() - start;
LOGGER.info("poi写入消费:{}", System.currentTimeMillis() - start);
@ -263,7 +340,7 @@ public class LargeDataTest {
LOGGER.info("easyxcel写入:{}", CostUtil.count2);
LOGGER.info("easyxcel写入:{}", CostUtil.count);
LOGGER.info("easyxcel写入:{}", FillStyleCellWriteHandler.count);
LOGGER.info("easyxcel写入:{}", WriteWorkbookHolder.count);
}

Loading…
Cancel
Save