docs: def range(self, name):
          """Returns a list of :class:`Cell` objects from a specified range.
  
          :param name: A string with range value in A1 notation, e.g. 'A1:A5'.
          :type name: str
  
          Alternatively, you may specify numeric boundaries. All values
          index from 1 (one):
  
          :param first_row: Row number
          :type first_row: int
          :param first_col: Row number
          :type first_col: int
          :param last_row: Row number
          :type last_row: int
          :param last_col: Row number
          :type last_col: int
  
          Example::
  
              >>> # Using A1 notation
              >>> worksheet.range('A1:B7')
              [<Cell R1C1 "42">, ...]
  
              >>> # Same with numeric boundaries
              >>> worksheet.range(1, 1, 7, 2)
              [<Cell R1C1 "42">, ...]
  
          """
  
          range_label = '%s!%s' % (self.title, name)
  
          data = self.spreadsheet.values_get(range_label)
  
          start, end = name.split(':')
          (row_offset, column_offset) = a1_to_rowcol(start)
          (last_row, last_column) = a1_to_rowcol(end)
  
          values = data.get('values', [])
  
          rect_values = fill_gaps(
              values,
              rows=last_row - row_offset + 1,
              cols=last_column - column_offset + 1
          )
  
          return [
              Cell(row=i + row_offset, col=j + column_offset, value=value)
              for i, row in enumerate(rect_values)
              for j, value in enumerate(row)
          ]