code: private String readCellByType(Cell cell, CellType type) {
          String txt = "";
          if (cell != null) {
              switch (type) {
                  case NUMERIC:
                      txt = dateOrNumberProcessing(cell);
                      break;
                  case STRING:
                      txt = String.valueOf(cell.getRichStringCellValue());
                      logger.debug("CELL_TYPE_STRING: {}", txt);
                      break;
                  case FORMULA:
                      txt = readCellByType(cell, cell.getCachedFormulaResultTypeEnum());
                      logger.debug("CELL_TYPE_FORMULA: {}", txt);
                      break;
                  case BLANK:
                      logger.debug("CELL_TYPE_BLANK (we do nothing)");
                      break;
                  default:
                      logger.error(Messages.getMessage(EXCEL_DATA_PROVIDER_WRONG_CELL_TYPE_ERROR_MESSAGE), type);
                      break;
              }
          }
          return txt;
      }
docs: readCellByType is used because CELL_TYPE_FORMULA can be CELL_TYPE_NUMERIC, CELL_TYPE_NUMERIC(date) or CELL_TYPE_STRING.
  
  @param cellcell
  read (line and column)
  @param type
  CELL_TYPE_FORMULA can be CELL_TYPE_NUMERIC, CELL_TYPE_NUMERIC(date) or CELL_TYPE_STRING
  @return a string with the data (evalued if CELL_TYPE_FORMULA)