def load(self):
import gspread<EOL>from oauth2client.service_account import ServiceAccountCredentials<EOL>self._validate_table_name()<EOL>self._validate_title()<EOL>scope = ["<STR_LIT>", "<STR_LIT>"]<EOL>credentials = ServiceAccountCredentials.from_json_keyfile_name(self.source, scope)<EOL>gc = gspread.authorize(credentials)<EOL>try:<EOL><INDENT>for worksheet in gc.open(self.title).worksheets():<EOL><INDENT>self._worksheet = worksheet<EOL>self.__all_values = [row for row in worksheet.get_all_values()]<EOL>if self._is_empty_sheet():<EOL><INDENT>continue<EOL><DEDENT>try:<EOL><INDENT>self.__strip_empty_col()<EOL><DEDENT>except ValueError:<EOL><INDENT>continue<EOL><DEDENT>value_matrix = self.__all_values[self._get_start_row_idx() :]<EOL>try:<EOL><INDENT>headers = value_matrix[<NUM_LIT:0>]<EOL>rows = value_matrix[<NUM_LIT:1>:]<EOL><DEDENT>except IndexError:<EOL><INDENT>continue<EOL><DEDENT>self.inc_table_count()<EOL>yield TableData(<EOL>self.make_table_name(),<EOL>headers,<EOL>rows,<EOL>dp_extractor=self.dp_extractor,<EOL>type_hints=self._extract_type_hints(headers),<EOL>)<EOL><DEDENT><DEDENT>except gspread.exceptions.SpreadsheetNotFound:<EOL><INDENT>raise OpenError("<STR_LIT>".format(self.title))<EOL><DEDENT>except gspread.exceptions.APIError as e:<EOL><INDENT>raise APIError(e)<EOL><DEDENT>
Load table data from a Google Spreadsheet.

This method consider :py:attr:`.source` as a path to the
credential JSON file to access Google Sheets API.

The method automatically search the header row start from
:py:attr:`.start_row`. The condition of the header row is that
all of the columns have value (except empty columns).

:return:
    Loaded table data. Return one |TableData| for each sheet in
    the workbook. The table name for data will be determined by
    :py:meth:`~.GoogleSheetsTableLoader.make_table_name`.
:rtype: iterator of |TableData|
:raises pytablereader.DataError:
    If the header row is not found.
:raises pytablereader.OpenError:
    If the spread sheet not found.