Browse Source

[add] 支持多种数据源 与原版一致

pull/3052/head
wolray 2 years ago committed by GitHub
parent
commit
776e67439b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 38
      easyexcel-core/src/main/java/com/alibaba/excel/EasyExcelFactory.java
  2. 36
      easyexcel-core/src/main/java/com/alibaba/excel/StreamBuilder.java
  3. 69
      easyexcel-core/src/main/java/com/alibaba/excel/read/builder/StreamingReaderBuilder.java

38
easyexcel-core/src/main/java/com/alibaba/excel/EasyExcelFactory.java

@ -3,12 +3,10 @@ package com.alibaba.excel;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.function.Consumer;
import java.util.stream.Stream;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.builder.ExcelReaderBuilder;
import com.alibaba.excel.read.builder.ExcelReaderSheetBuilder;
import com.alibaba.excel.read.builder.StreamingReaderBuilder;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.write.builder.ExcelWriterBuilder;
import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder;
@ -249,22 +247,6 @@ public class EasyExcelFactory {
return read(pathName, null, readListener);
}
public static <T> Stream<T> read(String pathName, Class<T> head) {
Consumer<Consumer<T>> sequence = c -> {
ReadListener<T> listener = new ReadListener<T>() {
@Override
public void invoke(T data, AnalysisContext context) {
c.accept(data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {}
};
read(pathName, head, listener).sheet().doRead();
};
return StreamBuilder.stream(sequence);
}
/**
* Build excel the read
*
@ -326,6 +308,24 @@ public class EasyExcelFactory {
return excelReaderBuilder;
}
public static <T> StreamingReaderBuilder<T> read(File file, Class<T> head) {
StreamingReaderBuilder<T> reader = new StreamingReaderBuilder<>();
reader.file(file).head(head);
return reader;
}
public static <T> StreamingReaderBuilder<T> read(String pathName, Class<T> head) {
StreamingReaderBuilder<T> reader = new StreamingReaderBuilder<>();
reader.file(pathName).head(head);
return reader;
}
public static <T> StreamingReaderBuilder<T> read(InputStream inputStream, Class<T> head) {
StreamingReaderBuilder<T> reader = new StreamingReaderBuilder<>();
reader.file(inputStream).head(head);
return reader;
}
/**
* Build excel the 'readSheet'
*

36
easyexcel-core/src/main/java/com/alibaba/excel/StreamBuilder.java

@ -1,36 +0,0 @@
package com.alibaba.excel;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.function.Consumer;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
/**
* build stream from generator
*/
public class StreamBuilder {
public static <T> Stream<T> stream(Consumer<Consumer<T>> sequence) {
Iterator<T> iterator = new Iterator<T>() {
@Override
public boolean hasNext() {
throw new NoSuchElementException();
}
@Override
public T next() {
throw new NoSuchElementException();
}
@Override
public void forEachRemaining(Consumer<? super T> action) {
sequence.accept(action::accept);
}
};
return StreamSupport.stream(
Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED),
false);
}
}

69
easyexcel-core/src/main/java/com/alibaba/excel/read/builder/StreamingReaderBuilder.java

@ -0,0 +1,69 @@
package com.alibaba.excel.read.builder;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import java.util.Iterator;
import java.util.List;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
/**
* @author yilai
*/
public class StreamingReaderBuilder<T> extends ExcelReaderBuilder {
public Stream<T> toStream() {
return toStream(ExcelReaderBuilder::sheet);
}
public Stream<T> toStream(Integer sheetNo) {
return toStream(b -> b.sheet(sheetNo));
}
public Stream<T> toStream(String sheetName) {
return toStream(b -> b.sheet(sheetName));
}
private Stream<T> toStream(Function<ExcelReaderBuilder, ExcelReaderSheetBuilder> toSheet) {
return stream(c -> {
List<ReadListener<?>> listeners = parameter().getCustomReadListenerList();
if (listeners != null && !listeners.isEmpty()) {
listeners.clear();
}
registerReadListener(new ReadListener<T>() {
@Override
public void invoke(T data, AnalysisContext context) {
c.accept(data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {}
});
toSheet.apply(this).doRead();
});
}
public static <T> Stream<T> stream(Consumer<Consumer<T>> sequence) {
Iterator<T> iterator = new Iterator<T>() {
@Override
public boolean hasNext() {
throw new UnsupportedOperationException();
}
@Override
public T next() {
throw new UnsupportedOperationException();
}
@Override
public void forEachRemaining(Consumer<? super T> action) {
sequence.accept(action::accept);
}
};
return StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), false);
}
}
Loading…
Cancel
Save