Can you produce a Python example of how to download a Google Docs spreadsheet given its key and worksheet ID (gid
)? I can't.
I've scoured versions 1, 2 and 3 of the API. I'm having no luck, I can't figure out their compilcated ATOM-like feeds API, the gdata.docs.service.DocsService._DownloadFile
private method says that I'm unauthorized, and I don't want to write an entire Google Login authentication system myself. I'm about to stab myself in the face due to frustration.
I have a few spreadsheets and I want to access them like so:
username = '[email protected]' password = getpass.getpass() def get_spreadsheet(key, gid=0): ... (help!) ... for row in get_spreadsheet('5a3c7f7dcee4b4f'): cell1, cell2, cell3 = row ...
Please save my face.
Update 1: I've tried the following, but no combination of Download()
or Export()
seems to work. (Docs for DocsService
here)
import gdata.docs.service import getpass import os import tempfile import csv def get_csv(file_path): return csv.reader(file(file_path).readlines()) def get_spreadsheet(key, gid=0): gd_client = gdata.docs.service.DocsService() gd_client.email = '[email protected]' gd_client.password = getpass.getpass() gd_client.ssl = False gd_client.source = "My Fancy Spreadsheet Downloader" gd_client.ProgrammaticLogin() file_path = tempfile.mktemp(suffix='.csv') uri = 'http://docs.google.com/feeds/documents/private/full/%s' % key try: entry = gd_client.GetDocumentListEntry(uri) # XXXX - The following dies with RequestError "Unauthorized" gd_client.Download(entry, file_path) return get_csv(file_path) finally: try: os.remove(file_path) except OSError: pass
With the Python to Google Sheets connection, it becomes easier to integrate the data with libraries like NumPy or Pandas. Google also provides an API for executing most of the operations, which acts as a medium to connect Python to Google Sheets.
The https://github.com/burnash/gspread library is a newer, simpler way to interact with Google Spreadsheets, rather than the old answers to this that suggest the gdata
library which is not only too low-level, but is also overly-complicated.
You will also need to create and download (in JSON format) a Service Account key: https://console.developers.google.com/apis/credentials/serviceaccountkey
Here's an example of how to use it:
import csv import gspread from oauth2client.service_account import ServiceAccountCredentials scope = ['https://spreadsheets.google.com/feeds'] credentials = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope) docid = "0zjVQXjJixf-SdGpLKnJtcmQhNjVUTk1hNTRpc0x5b9c" client = gspread.authorize(credentials) spreadsheet = client.open_by_key(docid) for i, worksheet in enumerate(spreadsheet.worksheets()): filename = docid + '-worksheet' + str(i) + '.csv' with open(filename, 'wb') as f: writer = csv.writer(f) writer.writerows(worksheet.get_all_values())
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With