This low-level function returns cell data in a tibble with integer variables row and column (referring to location with the Google Sheet), an A1-style reference loc, and a cell list-column. The flagship function read_sheet() is what most users are looking for. It is basically sheets_cells() (this function), followed by spread_sheet(), which looks after reshaping and column typing.

sheets_cells(ss, sheet = NULL, range = NULL)



Something that identifies a Google Sheet: its file ID, a URL from which we can recover the ID, or a dribble, which is how googledrive represents Drive files. Processed through as_sheets_id().


Sheet to read, as in "worksheet" or "tab". Either a string (the name of a sheet), or an integer (the position of the sheet). Ignored if the sheet is specified via range. If neither argument specifies the sheet, defaults to the first visible sheet.


A cell range to read from. If NULL, all non-empty cells are read. Otherwise specify range as described in Sheets A1 notation or using the helpers documented in cell-specification. Sheets uses fairly standard spreadsheet range notation, although a bit different from Excel. Examples of valid ranges: "Sheet1!A1:B2", "Sheet1!A:A", "Sheet1!1:2", "Sheet1!A5:A", "A1:B2", "Sheet1". Interpreted strictly, even if the range forces the inclusion of leading, trailing, or embedded empty rows or columns. Takes precedence over skip, n_max and sheet. Note range can be a named range, like "sales_data", without any cell reference.


A tibble with one row per non-empty cell in the range. this might get dignified with a class?


#> Reading from 'deaths'
#> Range "'arts'"
#> # A tibble: 82 x 4 #> row col loc cell #> <int> <dbl> <chr> <list> #> 1 1 1 A1 <S3: CELL_TEXT> #> 2 2 1 A2 <S3: CELL_TEXT> #> 3 2 6 F2 <S3: CELL_TEXT> #> 4 3 1 A3 <S3: CELL_TEXT> #> 5 3 2 B3 <S3: CELL_TEXT> #> 6 3 3 C3 <S3: CELL_TEXT> #> 7 3 5 E3 <S3: CELL_TEXT> #> 8 3 6 F3 <S3: CELL_TEXT> #> 9 4 1 A4 <S3: CELL_TEXT> #> 10 4 2 B4 <S3: CELL_TEXT> #> # ... with 72 more rows
# NOT RUN { ## use tidyr::complete() if you want one row per cell, even if empty test_sheet <- "1J5gb0u8n3D2qx3O3rY28isnI5SD89attRwhWPWlkmDM" (x <- sheets_cells(test_sheet, range = "C2:D4")) x %>% tidyr::complete(row, col, fill = list(cell = list(list()))) # }