|
|
|
|
@ -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);
|
|
|
|
|
|