Simple interface for working with Google Sheets.
Features:
- Open a spreadsheet by title, key or url.
- Read, write, and format cell ranges.
- Sharing and access control.
- Batching updates.
pip install gspreadRequirements: Python 3.6+.
Start using gspread:
importgspreadgc=gspread.service_account() # Open a sheet from a spreadsheet in one gowks=gc.open("Where is the money Lebowski?").sheet1# Update a range of cells using the top left corner addresswks.update('A1', [[1, 2], [3, 4]]) # Or update a single cellwks.update('B42', "it's down there somewhere, let me take another look.") # Format the headerwks.format('A1:B1',{'textFormat':{'bold': True}})# You can open a spreadsheet by its title as it appears in Google Docssh=gc.open('My poor gym results') # <-- Look ma, no keys!# If you want to be specific, use a key (which can be extracted from# the spreadsheet's url)sht1=gc.open_by_key('0BmgG6nO_6dprdS1MN3d3MkdPa142WFRrdnRRUWl1UFE') # Or, if you feel really lazy to extract that key, paste the entire urlsht2=gc.open_by_url('https://docs.google.com/spreadsheet/ccc?key=0Bm...FE&hl')sh=gc.create('A new spreadsheet') # But that new spreadsheet will be visible only to your script's account.# To be able to access newly created spreadsheet you *must* share it# with your email. Which brings us to…sh.share('[email protected]', perm_type='user', role='writer')# Select worksheet by index. Worksheet indexes start from zeroworksheet=sh.get_worksheet(0) # By titleworksheet=sh.worksheet("January") # Most common case: Sheet1worksheet=sh.sheet1# Get a list of all worksheetsworksheet_list=sh.worksheets()worksheet=sh.add_worksheet(title="A worksheet", rows="100", cols="20")sh.del_worksheet(worksheet)# With labelval=worksheet.get('B1').first() # With coordsval=worksheet.cell(1, 2).value# Get all values from the first rowvalues_list=worksheet.row_values(1) # Get all values from the first columnvalues_list=worksheet.col_values(1)list_of_lists=worksheet.get_values()# Find a cell with exact string valuecell=worksheet.find("Dough") print("Found something at R%sC%s"% (cell.row, cell.col)) # Find a cell matching a regular expressionamount_re=re.compile(r'(Big|Enormous) dough') cell=worksheet.find(amount_re)# Find all cells with string valuecell_list=worksheet.findall("Rug store") # Find all cells with regexpcriteria_re=re.compile(r'(Small|Room-tiering) rug') cell_list=worksheet.findall(criteria_re)# Update a single cellworksheet.update('B1', 'Bingo!') # Update a rangeworksheet.update('A1:B2', [[1, 2], [3, 4]]) # Update multiple ranges at onceworksheet.batch_update([{'range': 'A1:B2', 'values': [['A1', 'B1'], ['A2', 'B2']], },{'range': 'J42:K43', 'values': [[1, 2], [3, 4]], }])Please make sure to take a moment and read the Code of Conduct.
The best way to get an answer to a question is to ask on Stack Overflow with a gspread tag.
Please report bugs and suggest features via the GitHub Issues.
Before opening an issue, search the tracker for possible duplicates. If you find a duplicate, please add a comment saying that you encountered the problem as well.
Documentation is as important as code. If you know how to make it more consistent, readable and clear, please submit a pull request. The documentation files are in docs folder, use reStructuredText markup and rendered by Sphinx.
Please make sure to read the Contributing Guide before making a pull request.