code: public void process() throws ReadExcelException {
          MissingRecordAwareHSSFListener listener = new MissingRecordAwareHSSFListener(this);
          formatListener = new FormatTrackingHSSFListenerPlus(listener);
  
          HSSFEventFactory factory = new HSSFEventFactory();
          HSSFRequest request = new HSSFRequest();
  
          if (outputFormulaValues) {
              request.addListenerForAllRecords(formatListener);
          } else {
              workbookBuildingListener = new EventWorkbookBuilder.SheetRecordCollectingListener(formatListener);
              request.addListenerForAllRecords(workbookBuildingListener);
          }
  
          try {
              factory.processWorkbookEvents(request, fs);
          } catch (IOException e) {
              throw new ReadExcelException(e.getMessage());
          }
          //解析完后，判断用户是否设置了limit，若设置了执行以下操作
          if (this.limit > 0) {
              if (!this.datas.isEmpty()) {
                  if (this.callback != null) {
                      //若数据不为空且回调函数被设置，则调用回调函数
                      this.callback.callback(this.currentRowInSheet, this.currentSheetInExcel, this.realRowInSheet,
                              this.realRowInExcel, this.allSheetInExcel, this.titles, this.columns, this.datas);
                  }
                  this.datas.clear();
              }
          }
      }
docs: Main HSSFListener method, processes events, and outputs the
  CSV as the file is processed.
  开始解析Excel文档