easyExcel-復雜表頭-多個流,多個sheet循環讀取【分段讀取】案例


//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();
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM