code: def get_sheet_data(
      self, sheet, file_rows_needed: int | None = None
  ) -> list[list[Scalar]]:
      from xlrd import (
          XL_CELL_BOOLEAN,
          XL_CELL_DATE,
          XL_CELL_ERROR,
          XL_CELL_NUMBER,
          xldate,
      )
  
      epoch1904 = self.book.datemode
  
      def _parse_cell(cell_contents, cell_typ):
          """
          converts the contents of the cell into a pandas appropriate object
          """
          if cell_typ == XL_CELL_DATE:
              # Use the newer xlrd datetime handling.
              try:
                  cell_contents = xldate.xldate_as_datetime(
                      cell_contents, epoch1904
                  )
              except OverflowError:
                  return cell_contents
  
              # Excel doesn't distinguish between dates and time,
              # so we treat dates on the epoch as times only.
              # Also, Excel supports 1900 and 1904 epochs.
              year = (cell_contents.timetuple())[0:3]
              if (not epoch1904 and year == (1899, 12, 31)) or (
                  epoch1904 and year == (1904, 1, 1)
              ):
                  cell_contents = time(
                      cell_contents.hour,
                      cell_contents.minute,
                      cell_contents.second,
                      cell_contents.microsecond,
                  )
  
          elif cell_typ == XL_CELL_ERROR:
              cell_contents = np.nan
          elif cell_typ == XL_CELL_BOOLEAN:
              cell_contents = bool(cell_contents)
          elif cell_typ == XL_CELL_NUMBER:
              # GH5394 - Excel 'numbers' are always floats
              # it's a minimal perf hit and less surprising
              val = int(cell_contents)
              if val == cell_contents:
                  cell_contents = val
          return cell_contents
  
      data = []
  
      nrows = sheet.nrows
      if file_rows_needed is not None:
          nrows = min(nrows, file_rows_needed)
      for i in range(nrows):
          row = [
              _parse_cell(value, typ)
              for value, typ in zip(
                  sheet.row_values(i), sheet.row_types(i)
              )
          ]
          data.append(row)
  
      return data
  
file_path: catboost/contrib/python/pandas/py3/pandas/io/excel/_xlrd.py
imports: from __future__ import annotations
  from datetime import time
  import numpy
  from pandas._typing import Scalar, StorageOptions
  from pandas.compat._optional import import_optional_dependency
  from pandas.util._decorators import doc
  from pandas.core.shared_docs import _shared_docs
  from pandas.io.excel._base import BaseExcelReader
label_desc: Use image node_id 7 for calling the XlrdReader obj's underlying member method code with example usage: obj.get_sheet_data(sheet, file_rows_needed) and returns: data, cell_contents, cell_contents