//title監聽器
@Slf4j
public class TitleListener extends AnalysisEventListener<Title> {
private final List<Title> rows = new ArrayList<>();
@Override
public void invoke(Title title, AnalysisContext analysisContext) {
rows.add(title);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
public List<Title> getRows() {
return rows;
}
}
===============================================================
//SignalListener 監聽器
@Slf4j
public class SignalListener extends AnalysisEventListener<Signal> {
private final List<Signal> rows = new ArrayList<>();
private static String subdivisionalWork = "";
private static String partitionedPrj = "";
private static String singlePrj="";
@Override
public void invoke(Signal signal, AnalysisContext analysisContext) {
if (null != signal.getSubdivisionalWork()) {
subdivisionalWork = signal.getSubdivisionalWork();
}
if (null != signal.getPartitionedPrj()) {
partitionedPrj = signal.getPartitionedPrj();
}
if (null != signal.getSinglePrj()) {
singlePrj = signal.getSinglePrj();
}
signal.setSubdivisionalWork(subdivisionalWork);
signal.setPartitionedPrj(partitionedPrj);
signal.setSinglePrj(singlePrj);
rows.add(signal);
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
public List<Signal> getRows() {
return rows;
}
}
=============================================================================
//實體
@Data
public class Signal extends BaseRowModel {
@ExcelProperty(value = {"單項", "單項"}, index = 0)
private String singlePrj="";
@ExcelProperty(value = {"分部", "分部"}, index = 1)
private String partitionedPrj="";
@ExcelProperty(value = {"分項", "分項"}, index = 2)
private String subdivisionalWork="";
@ExcelProperty(value = {"工作事項清單", "工作事項清單"}, index = 3)
private String workItem = "";
@ExcelProperty(value = {"單位", "單位"}, index = 4)
private String description="";
@ExcelProperty(value = {"設計總數量", "左"}, index = 5)
private String designLeft ="0";
@ExcelProperty(value = {"設計總數量", "右"}, index = 6)
private String designRight = "0";
@ExcelProperty(value = {"設計總數量", "設計總數量"}, index = 7)
private String designTotal = "0";
@ExcelProperty(value = {"當日完成數量", "左"}, index = 8)
private String currentLeft = "0";
@ExcelProperty(value = {"當日完成數量", "右"}, index = 9)
private String currentRight = "0";
@ExcelProperty(value = {"當日完成數量", "當日完成數量"}, index = 10)
private String currentTotal = "0";
@ExcelProperty(value = "備注", index = 11)
private String comment;
}
//實體
@Data
public class Title extends BaseRowModel {
@ExcelProperty(value = "項目名稱",index = 1)
private String proName;
}
=======================================================================================================
部分代碼
@ResponseBody
public Result<String> read4File(MultipartFile[] file) throws Exception {
for (int i = 0; i < file.length; i++) {
//循環的部分
ExcelReader excelReaderOnePart = EasyExcel.read(file[i].getInputStream()).build();
ExcelReader excelReaderTwoPart = EasyExcel.read(file[i].getInputStream()).build();
List<ReadSheet> readSheets = EasyExcel.read(file[i].getInputStream()).build().excelExecutor().sheetList();
if (!readSheets.isEmpty()) {
for (ReadSheet readSheet : readSheets) {
//ExcelListener<Title> listener = new ExcelListener<>();
TitleListener titleListener=new TitleListener();
SignalListener signalListener = new SignalListener();
//第一部分從第一行開始讀
readSheet = EasyExcel.readSheet(readSheet.getSheetNo()).head(Title.class).registerReadListener(titleListener).headRowNumber(1).build();
excelReaderOnePart.read(readSheet);
//第二部分從第7行開始讀
readSheet = EasyExcel.readSheet(readSheet.getSheetNo()).head(Signal.class).registerReadListener(signalListener).headRowNumber(7).build();
excelReaderTwoPart.read(readSheet);
//讀取名稱
String proName = titleListener.getRows().get(0).getProName();
//讀取單位名稱
String unitName = titleListener.getRows().get(1).getProName();
//讀取日期
String excelDate = titleListener.getRows().get(2).getProName();
//拿到讀取到的集合
List<Signal> signals = signalListener.getRows();
// doSomething
.......
}
excelReaderOnePart.finish();
excelReaderTwoPart.finish();
}
}