diff --git a/gsrs-core-entities/src/main/java/ix/ginas/exporters/ExcelSpreadsheet.java b/gsrs-core-entities/src/main/java/ix/ginas/exporters/ExcelSpreadsheet.java index daf45f78e..618662040 100644 --- a/gsrs-core-entities/src/main/java/ix/ginas/exporters/ExcelSpreadsheet.java +++ b/gsrs-core-entities/src/main/java/ix/ginas/exporters/ExcelSpreadsheet.java @@ -1,18 +1,23 @@ package ix.ginas.exporters; -import gov.nih.ncats.common.io.IOUtil; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.Workbook; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; - import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Date; +import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; + +import gov.nih.ncats.common.stream.StreamUtil; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import gov.nih.ncats.common.io.IOUtil; /** * {@link Spreadsheet} implementation that writes out @@ -28,6 +33,11 @@ public class ExcelSpreadsheet implements Spreadsheet { private final Sheet sheet; + private final boolean AUTO_SPILL_OVER=true; + private final long SPILL_OVER_AFTER=1000000; + private final boolean AUTO_SPILL_HEADER_REPEAT=true; + + private List headers; private final OutputStream out; @@ -36,14 +46,47 @@ private ExcelSpreadsheet(Workbook workbook, OutputStream out) { this.out = out; //just first sheet sheet = workbook.createSheet(); + } - @Override public SpreadsheetRow getRow(int i) { org.apache.poi.ss.usermodel.Row r = sheet.getRow(i); + int sheetIndex = 0; + int newRowIndex= i; + if(AUTO_SPILL_OVER) { + sheetIndex= (int) (i/SPILL_OVER_AFTER); + newRowIndex = (int) (i%SPILL_OVER_AFTER); + + sheetIndex= (int) (i/SPILL_OVER_AFTER); + newRowIndex = (int) (i%SPILL_OVER_AFTER); + if(sheetIndex>0) { + if(AUTO_SPILL_HEADER_REPEAT) { + newRowIndex++; //add a row for header + } + } + + while(workbook.getNumberOfSheets()c.getStringCellValue()) + .collect(Collectors.toList()); + } + if (r == null) { - r = sheet.createRow(i); + r = workbook.getSheetAt(sheetIndex).createRow(newRowIndex); } return new RowWrapper(r); }