/python-google-spreadsheet

A simple Python wrapper for the Google Spreadsheet API

Primary LanguagePythonOtherNOASSERTION

Google Spreadsheets API

A simple Python wrapper for the Google Spreadsheeta API. Build Status

Features

  • An object oriented interface for Worksheets
  • Supports List Feed view of spreadsheet rows, represented as dictionaries
  • Compatible with Google App Engine
  • Supports oauth

Requirements

Before you get started, make sure you have:

Usage

List Spreadsheets and Worksheets:

>>> from google_spreadsheet.api import SpreadsheetAPI
>>> api = SpreadsheetAPI()
>>> spreadsheets = api.list_spreadsheets()
>>> spreadsheets
[('MyFirstSpreadsheet', 'tkZQWzwHEjKTWFFCAgw'), ('MySecondSpreadsheet', 't5I-ZPGdXjTrjMefHcg'), 
('MyThirdSpreadsheet', 't0heCWhzCmm9Y-GTTM_Q')]
>>> worksheets = api.list_worksheets(spreadsheets[0][1])
>>> worksheets
[('MyFirstWorksheet', 'od7'), ('MySecondWorksheet', 'od6'), ('MyThirdWorksheet', 'od4')]

Please note that in order to work with a Google Spreadsheet it must be accessible to the user who's login credentials are provided. The GOOGLE_SPREADSHEET_SOURCE argument is used by Google to identify your application and track API calls.

Working with a Worksheet:

>>> from google_spreadsheet.api import SpreadsheetAPI
>>> api = SpreadsheetAPI()
>>> sheet = api.get_worksheet('tkZQWzwHEjKTWFFCAgw', 'od7')
>>> rows = sheet.get_rows()
>>> len(rows)
18
>>> row_to_update = rows[0]
>>> row_to_update['name'] = 'New Name'
>>> sheet.update_row(row_to_update)
{'name': 'New Name'...}
>>> row_to_insert = rows[0]
>>> row_to_insert['name'] = 'Another Name'
>>> row = sheet.insert_row(row_to_insert)
{'name': 'Another Name'...}
>>> sheet.delete_row(row)
>>> sheet.delete_all_rows()

Advanced Queries:

>>> from google_spreadsheet.api import SpreadsheetAPI
>>> api = SpreadsheetAPI()
>>> sheet = api.get_worksheet('tkZQWzwHEjKTWFFCAgw', 'od7')
>>> rows = sheet.get_rows(query='name = "Joe" and height < 175')

Or filter in memory:

>>> sheet = api.get_worksheet('tkZQWzwHEjKTWFFCAgw', 'od7')
>>> filtered_rows = sheet.get_rows(
        filter_func=lambda row: row['status'] == "READY")

Sort:

>>> sheet = api.get_worksheet('tkZQWzwHEjKTWFFCAgw', 'od7')
>>> rows = sheet.get_rows(order_by='column:age', reverse='true')

Batch Update:

This is experimental. This takes starting x,y (upper left) and
ending x,y (lower right) coordinates of a box in the spreadsheet
and fills it with data in the given list of lists.  cells in the
box, but not in the data are blanked out.  This operation is fast
and is much better than deleting rows and adding rows.

This example would populate two rows with 3 populated columns.
All cells in the 4th column and all cells in rows 3 to 10 will
be blanked out because there is no data for them.

>>> sheet = api.get_worksheet('tkZQWzwHEjKTWFFCAgw', 'od7')
>>> sheet.batch((2,1),(10,4),[['row1','a','1'],['row2','b','2']])

That's it.

For more information about these calls, please consult the Google Spreadsheets API Developer Guide.

Tests

To run the test suite please follow these steps:

  • Make sure Nose is installed: (pip install nose)
  • Create a local file named: test_settings.py with the following variables set to the relevant values: GOOGLE_SPREADSHEET_USER, GOOGLE_SPREADSHEET_PASSWORD, GOOGLE_SPREADSHEET_SOURCE, GOOGLE_SPREADSHEET_KEY, GOOGLE_WORKSHEET_KEY, COLUMN_NAME, COLUMN_UNIQUE_VALUE
  • Run nosetests

License

Copyright © 2012 Yoav Aviram

See LICENSE for details.