code: @Override
      public Hashtable<String, Object> getDataAsHashtable() {
          logger.entering();
          Hashtable<String, Object> hashTable = new Hashtable<>();
  
          Sheet sheet = excelReader.fetchSheet(resource.getCls().getSimpleName());
          int numRows = sheet.getPhysicalNumberOfRows();
  
          for (int i = 2; i <= numRows; i++) {
              Row row = sheet.getRow(i - 1);
              if ((row != null) && (row.getCell(0) != null)) {
                  Object obj;
                  obj = getSingleExcelRow(getObject(), i, false);
                  String key = row.getCell(0).toString();
                  if ((key != null) && (obj != null)) {
                      hashTable.put(key, obj);
                  }
              }
          }
          logger.exiting(hashTable);
          return hashTable;
      }
docs: This function will read all rows of a specified excel sheet and store the data to a hash table. Users can get a
  row of data from the hash table by call a get with a specified key. This excel reader function is for users who
  want to control the data feed to the test cases manually without the benefit of TestNG DataProvider. <br>
  <br>
  <b>Note:</b> Unlike {@link ExcelDataProviderImpl#getAllData()} this method will skip ALL blank rows
  that may occur in between data in the spreadsheet. <br>
  Hence the number of rows that are fetched by this method and
  {@link ExcelDataProviderImpl#getAllData()} <b>NEED NOT</b> be the same.
  
  <h3>Example:</h3>
  
  <pre>
  ...
  MyDataStructure myObj = new MyDataStructure();
  HashTable&lt;String, Object&gt; myExcelTableData;
  ...
  myExceltableData = SimpleExcelDataProvider.getDataAsHashtable();
  </pre>
  
  @return an object of type {@link Hashtable} that represents the excel sheet data in form of hashTable.