fix Big writer bug

This commit is contained in:
Looly 2020-06-15 12:00:23 +08:00
parent 411fea9c9f
commit cf19fe3003
3 changed files with 50 additions and 18 deletions

View File

@ -16,7 +16,8 @@
* 【json 】 修复append方法导致的JSONConfig传递失效问题issue#906@Github
* 【core 】 修复CollUtil.subtractToList判断错误pr#915@Github
* 【poi 】 修复WordWriter写表格问题pr#914@Github
* 【core 】 修复IoUtil.readBytes缓存数组长度问题issue#I1KIUE@Github
* 【core 】 修复IoUtil.readBytes缓存数组长度问题issue#I1KIUE@Gitee
* 【core 】 修复BigExcelWriter多次flush导致的问题issue#920@Github
-------------------------------------------------------------------------------------------------------------

View File

@ -1,11 +1,12 @@
package cn.hutool.poi.excel;
import java.io.File;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IORuntimeException;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import cn.hutool.core.io.FileUtil;
import java.io.File;
import java.io.OutputStream;
/**
* 大数据量Excel写出
@ -17,6 +18,11 @@ public class BigExcelWriter extends ExcelWriter {
public static final int DEFAULT_WINDOW_SIZE = SXSSFWorkbook.DEFAULT_WINDOW_SIZE;
/**
* BigExcelWriter只能flush一次因此调用后不再重复写出
*/
private boolean isFlushed;
// -------------------------------------------------------------------------- Constructor start
/**
* 构造默认生成xls格式的Excel文件<br>
@ -116,11 +122,22 @@ public class BigExcelWriter extends ExcelWriter {
// -------------------------------------------------------------------------- Constructor end
@Override
public ExcelWriter flush(OutputStream out, boolean isCloseOut) throws IORuntimeException {
if(false == isFlushed){
isFlushed = true;
return super.flush(out, isCloseOut);
}
return this;
}
@Override
public void close() {
if (null != this.destFile) {
if (null != this.destFile && false == isFlushed) {
flush();
}
// 清理临时文件
((SXSSFWorkbook) this.workbook).dispose();
super.closeWithoutFlush();
}

View File

@ -1,17 +1,5 @@
package cn.hutool.poi.excel.test;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.junit.Ignore;
import org.junit.Test;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
@ -19,7 +7,20 @@ import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.poi.excel.BigExcelWriter;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import cn.hutool.poi.excel.style.StyleUtil;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.junit.Ignore;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* 写出Excel单元测试
@ -197,10 +198,23 @@ public class BigExcelWriteTest {
@Test
@Ignore
public void writeCellValueTest() {
String path = "e:/cellValueTest.xlsx";
String path = "d:/test/cellValueTest.xlsx";
FileUtil.del(path);
BigExcelWriter writer = new BigExcelWriter(path);
writer.writeCellValue(3, 5, "aaa");
writer.close();
}
@Test
@Ignore
public void closeTest() {
final Map<String, ?> map1 = MapUtil.of("id", "123456");
final Map<String, ?> map2 = MapUtil.of("id", "123457");
final List<?> data = Arrays.asList(map1, map2);
final String destFilePath = "d:/test/closeTest.xlsx";//
FileUtil.del(destFilePath);
try (ExcelWriter writer = ExcelUtil.getBigWriter(destFilePath)) {
writer.write(data).flush();
}
}
}