title: POI XSSF reading all columns not just all defined columns - results not expected
body: <p>Is there a way to not read the entire Excel documents row, I'm reading the cell's defined in the document, but, it's pulling in the entire sheet's columns??? </p>
  
  <p>I'm converting an Excel document to a CSV document. I am getting this result.</p>
  
  <pre><code>Aircraft ID (FADEC_SHIP_POS),Fleet (Fleet Name),Fault Date (TIMESTAMP or FADEC_DATE_TIME),Fault ID (FADEC_ID),Fault Description (FADEC_FAULT_DESCRIPTION),Priority (FADEC_PRIORITY),ATA,Flight Phase (FM),Report Type (REPORT_TYPE),Flight Number (FLT),Origin (ORIG),Destination (DEST),Site Reference Name,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
  </code></pre>
  
  <p>I don't need all those extra undefined columns, (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)</p>
  
  <p>also, there can be empty values in the row's defined columns: - these are expected and needed</p>
  
  <pre><code>6808-1,B757,2019-09-25 20:50:18,351-21A,P(S) 351-21,3,,Climb,901,1278,,,Sprint Airlines
  </code></pre>
  
  <p>my class</p>
  
  <pre><code>public class XlsxToCsv implements Processor {
  
  private Logger log = Logger.getLogger(XlsxToCsv.class.getName());
  
   private static final String CSV_SEPERATOR_CHAR=",";
   private static final String NEW_LINE_CHARACTER="\r\n";
  
  @Override
  public void process(Exchange exchange) throws Exception {
  
      log.info("Entering XLSX Excel to CSV ...");
  
      int sheetIdx = 0;
      byte[] in = exchange.getIn().getBody(byte[].class);
      String out = excelToCSV(in,sheetIdx);
      exchange.getIn().setBody(out);
  
      log.info("Exiting XLSX Excel to CSV ...");
  }
  
  private String excelToCSV(byte[] xlsxFile, int sheetIdx) throws Exception {
  
      InputStream is = null;
      StringBuffer sb = new StringBuffer();
      String cellVal = "";
  
      try {
          is = new ByteArrayInputStream(xlsxFile);
      } catch (Exception e) {
          e.printStackTrace();
      } 
  
      XSSFWorkbook workBook = new XSSFWorkbook(is);
      XSSFSheet workSheet = workBook.getSheetAt(sheetIdx);
  
      for (int i = 0; i &lt; workSheet.getPhysicalNumberOfRows(); i++) {
          XSSFRow row = workSheet.getRow(i);
          for (int j = 0; j &lt; row.getPhysicalNumberOfCells(); j++) {
              cellVal = getCellValueAsString(workBook, row.getCell(j));
                  if ( j == row.getPhysicalNumberOfCells() - 1) {
                      sb.append(cellVal).append(NEW_LINE_CHARACTER);
                  } else {
                      sb.append(cellVal).append(CSV_SEPERATOR_CHAR);
                  }
          }
      }
      workBook.close();
      return sb.toString();
  }
      private String getCellValueAsString(XSSFWorkbook workbook, XSSFCell cell) {
          String cellValue = "";
          if (cell != null) {
              CellType cellType = cell.getCellType();
              if (cellType == CellType.FORMULA) {
                  FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
                  cellType = evaluator.evaluateFormulaCell(cell);
              }
              switch (cellType) {
                  case STRING:
                      cellValue = cell.getStringCellValue();
                      break;
                  case NUMERIC:
                      Double doubleValue = cell.getNumericCellValue();
                      int intValue = doubleValue.intValue();
                      cellValue = Integer.toString(intValue);
                      break;
                  case BOOLEAN:
                      cellValue = Boolean.toString(cell.getBooleanCellValue());
                      break;
                  case ERROR:
                      cellValue = cell.getErrorCellString();
                      break;
                  case BLANK:
                      break;
                  default:
                      break;
              }
          }
  
          return cellValue;
      }
  </code></pre>
  
  <p>}</p>