readValues(..) 수정

master
mjkhan21 3 months ago
parent 5a9dd9f680
commit 919b7055d4

@ -10,6 +10,10 @@ import java.util.stream.Stream;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import cokr.xit.foundation.util.DateFormats;
@ -24,6 +28,20 @@ public class XLSReader extends XLS {
return this;
}
@Override
protected Workbook newWorkbook(InputStream input) throws Exception {
if (input == null)
return new SXSSFWorkbook(rowAccessWindowSize);
Workbook created = WorkbookFactory.create(input);
if (created instanceof XSSFWorkbook xssf)
return new SXSSFWorkbook(xssf, rowAccessWindowSize);
return created;
// return super.newWorkbook(input);
}
@Override
public XLSReader worksheet(int index) {
super.worksheet(index);
@ -89,6 +107,9 @@ public class XLSReader extends XLS {
}
public <T> T setRowValues(List<String> values, Supplier<T> target, ValueSetter<T> setter) {
if (isEmpty(values))
return null;
T t = target.get();
for (int i = 0, size = values.size(); i < size; ++i) {
setter.set(t, i, values.get(i));
@ -100,7 +121,11 @@ public class XLSReader extends XLS {
return setRowValues(rowValues(index), target, setter);
}
public static final BiPredicate<Integer, List<String>> emptyRow = (index, values) -> isEmpty(values);
public <T> Stream<T> readValues(int row, Supplier<T> target, ValueSetter<T> setter, BiPredicate<Integer, List<String>> terminate) {
if (terminate == null)
terminate = emptyRow;
Stream.Builder<T> builder = Stream.builder();
while (true) {
List<String> rowValues = rowValues(row);

Loading…
Cancel
Save