fix big excel writer bug

This commit is contained in:
Looly
2020-11-12 01:09:43 +08:00
parent c646ba04ef
commit 36e599f70b
4 changed files with 73 additions and 14 deletions

View File

@@ -3,6 +3,7 @@ package cn.hutool.poi.excel;
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.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.io.File;
@@ -122,6 +123,24 @@ public class BigExcelWriter extends ExcelWriter {
// -------------------------------------------------------------------------- Constructor end
@Override
public BigExcelWriter autoSizeColumn(int columnIndex) {
final SXSSFSheet sheet = (SXSSFSheet)this.sheet;
sheet.trackColumnForAutoSizing(columnIndex);
super.autoSizeColumn(columnIndex);
sheet.untrackColumnForAutoSizing(columnIndex);
return this;
}
@Override
public BigExcelWriter autoSizeColumnAll() {
final SXSSFSheet sheet = (SXSSFSheet)this.sheet;
sheet.trackAllColumnsForAutoSizing();
super.autoSizeColumnAll();
sheet.untrackAllColumnsForAutoSizing();
return this;
}
@Override
public ExcelWriter flush(OutputStream out, boolean isCloseOut) throws IORuntimeException {
if(false == isFlushed){

View File

@@ -18,6 +18,7 @@ import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -217,4 +218,35 @@ public class BigExcelWriteTest {
writer.write(data).flush();
}
}
@Test
@Ignore
public void issue1210() {
// 通过工具类创建writer
String path = "d:/test/issue1210.xlsx";
FileUtil.del(path);
BigExcelWriter writer = ExcelUtil.getBigWriter(path);
writer.addHeaderAlias("id", "SN");
writer.addHeaderAlias("userName", "User Name");
List<Map<String, Object>> list = new ArrayList<>();
list.add(new HashMap<String, Object>() {
private static final long serialVersionUID = 1L;
{
put("id", 1);
put("userName", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}});
list.add(new HashMap<String, Object>() {
private static final long serialVersionUID = 1L;
{
put("id", 2);
put("userName", "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
}});
writer.write(list, true);
writer.autoSizeColumnAll();
writer.close();
}
}