项目作者: burnash

项目描述 :
Google Sheets Python API
高级语言: Python
项目地址: git://github.com/burnash/gspread.git
创建时间: 2011-12-02T10:46:20Z
项目社区:https://github.com/burnash/gspread

开源协议:MIT License

下载


Google Spreadsheets Python API v4

main workflow
GitHub licence
GitHub downloads
documentation
PyPi download
PyPi version
python version

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.

Installation

  1. pip install gspread

Requirements: Python 3.8+.

Basic Usage

  1. Create credentials in Google API Console

  2. Start using gspread

  1. import gspread
  2. # First you need access to the Google API. Based on the route you
  3. # chose in Step 1, call either service_account(), oauth() or api_key().
  4. gc = gspread.service_account()
  5. # Open a sheet from a spreadsheet in one go
  6. wks = gc.open("Where is the money Lebowski?").sheet1
  7. # Update a range of cells using the top left corner address
  8. wks.update([[1, 2], [3, 4]], "A1")
  9. # Or update a single cell
  10. wks.update_acell("B42", "it's down there somewhere, let me take another look.")
  11. # Format the header
  12. wks.format('A1:B1', {'textFormat': {'bold': True}})

v5.12 to v6.0 Migration Guide

Upgrade from Python 3.7

Python 3.7 is end-of-life. gspread v6 requires a minimum of Python 3.8.

Change Worksheet.update arguments

The first two arguments (values & range_name) have swapped (to range_name & values). Either swap them (works in v6 only), or use named arguments (works in v5 & v6).

As well, values can no longer be a list, and must be a 2D array.

  1. - file.sheet1.update([["new", "values"]])
  2. + file.sheet1.update([["new", "values"]]) # unchanged
  3. - file.sheet1.update("B2:C2", [["54", "55"]])
  4. + file.sheet1.update([["54", "55"]], "B2:C2")
  5. # or
  6. + file.sheet1.update(range_name="B2:C2", values=[["54", "55"]])

More

See More Migration Guide

### Change colors from dictionary to text

v6 uses hexadecimal color representation. Change all colors to hex. You can use the compatibility function gspread.utils.convert_colors_to_hex_value() to convert a dictionary to a hex string.

diff - tab_color = {"red": 1, "green": 0.5, "blue": 1} + tab_color = "#FF7FFF" file.sheet1.update_tab_color(tab_color)

### Switch lastUpdateTime from property to method

diff - age = spreadsheet.lastUpdateTime + age = spreadsheet.get_lastUpdateTime()

### Replace method Worksheet.get_records

In v6 you can now only get all sheet records, using Worksheet.get_all_records(). The method Worksheet.get_records() has been removed. You can get some records using your own fetches and combine them with gspread.utils.to_records().

diff + from gspread import utils all_records = spreadsheet.get_all_records(head=1) - some_records = spreadsheet.get_all_records(head=1, first_index=6, last_index=9) - some_records = spreadsheet.get_records(head=1, first_index=6, last_index=9) + header = spreadsheet.get("1:1")[0] + cells = spreadsheet.get("6:9") + some_records = utils.to_records(header, cells)

### Silence warnings

In version 5 there are many warnings to mark deprecated feature/functions/methods.
They can be silenced by setting the GSPREAD_SILENCE_WARNINGS environment variable to 1

### Add more data to gspread.Worksheet.__init__

diff gc = gspread.service_account(filename="google_credentials.json") spreadsheet = gc.open_by_key("{{key}}") properties = spreadsheet.fetch_sheet_metadata()["sheets"][0]["properties"] - worksheet = gspread.Worksheet(spreadsheet, properties) + worksheet = gspread.Worksheet(spreadsheet, properties, spreadsheet.id, gc.http_client)

More Examples

Opening a Spreadsheet

  1. # You can open a spreadsheet by its title as it appears in Google Docs
  2. sh = gc.open('My poor gym results') # <-- Look ma, no keys!
  3. # If you want to be specific, use a key (which can be extracted from
  4. # the spreadsheet's url)
  5. sht1 = gc.open_by_key('0BmgG6nO_6dprdS1MN3d3MkdPa142WFRrdnRRUWl1UFE')
  6. # Or, if you feel really lazy to extract that key, paste the entire url
  7. sht2 = gc.open_by_url('https://docs.google.com/spreadsheet/ccc?key=0Bm...FE&hl')

Creating a Spreadsheet

  1. sh = gc.create('A new spreadsheet')
  2. # But that new spreadsheet will be visible only to your script's account.
  3. # To be able to access newly created spreadsheet you *must* share it
  4. # with your email. Which brings us to…

Sharing a Spreadsheet

  1. sh.share('otto@example.com', perm_type='user', role='writer')

Selecting a Worksheet

  1. # Select worksheet by index. Worksheet indexes start from zero
  2. worksheet = sh.get_worksheet(0)
  3. # By title
  4. worksheet = sh.worksheet("January")
  5. # Most common case: Sheet1
  6. worksheet = sh.sheet1
  7. # Get a list of all worksheets
  8. worksheet_list = sh.worksheets()

Creating a Worksheet

  1. worksheet = sh.add_worksheet(title="A worksheet", rows="100", cols="20")

Deleting a Worksheet

  1. sh.del_worksheet(worksheet)

Getting a Cell Value

  1. # With label
  2. val = worksheet.get('B1').first()
  3. # With coords
  4. val = worksheet.cell(1, 2).value

Getting All Values From a Row or a Column

  1. # Get all values from the first row
  2. values_list = worksheet.row_values(1)
  3. # Get all values from the first column
  4. values_list = worksheet.col_values(1)

Getting All Values From a Worksheet as a List of Lists

  1. from gspread.utils import GridRangeType
  2. list_of_lists = worksheet.get(return_type=GridRangeType.ListOfLists)

Getting a range of values

Receive only the cells with a value in them.

  1. >>> worksheet.get("A1:B4")
  2. [['A1', 'B1'], ['A2']]

Receive a rectangular array around the cells with values in them.

  1. >>> worksheet.get("A1:B4", pad_values=True)
  2. [['A1', 'B1'], ['A2', '']]

Receive an array matching the request size regardless of if values are empty or not.

  1. >>> worksheet.get("A1:B4", maintain_size=True)
  2. [['A1', 'B1'], ['A2', ''], ['', ''], ['', '']]

Finding a Cell

  1. # Find a cell with exact string value
  2. cell = worksheet.find("Dough")
  3. print("Found something at R%sC%s" % (cell.row, cell.col))
  4. # Find a cell matching a regular expression
  5. amount_re = re.compile(r'(Big|Enormous) dough')
  6. cell = worksheet.find(amount_re)

Finding All Matched Cells

  1. # Find all cells with string value
  2. cell_list = worksheet.findall("Rug store")
  3. # Find all cells with regexp
  4. criteria_re = re.compile(r'(Small|Room-tiering) rug')
  5. cell_list = worksheet.findall(criteria_re)

Updating Cells

  1. # Update a single cell
  2. worksheet.update_acell('B1', 'Bingo!')
  3. # Update a range
  4. worksheet.update([[1, 2], [3, 4]], 'A1:B2')
  5. # Update multiple ranges at once
  6. worksheet.batch_update([{
  7. 'range': 'A1:B2',
  8. 'values': [['A1', 'B1'], ['A2', 'B2']],
  9. }, {
  10. 'range': 'J42:K43',
  11. 'values': [[1, 2], [3, 4]],
  12. }])

Get unformatted cell value or formula

  1. from gspread.utils import ValueRenderOption
  2. # Get formatted cell value as displayed in the UI
  3. >>> worksheet.get("A1:B2")
  4. [['$12.00']]
  5. # Get unformatted value from the same cell range
  6. >>> worksheet.get("A1:B2", value_render_option=ValueRenderOption.unformatted)
  7. [[12]]
  8. # Get formula from a cell
  9. >>> worksheet.get("C2:D2", value_render_option=ValueRenderOption.formula)
  10. [['=1/1024']]

Add data validation to a range

  1. import gspread
  2. from gspread.utils import ValidationConditionType
  3. # Restrict the input to greater than 10 in a single cell
  4. worksheet.add_validation(
  5. 'A1',
  6. ValidationConditionType.number_greater,
  7. [10],
  8. strict=True,
  9. inputMessage='Value must be greater than 10',
  10. )
  11. # Restrict the input to Yes/No for a specific range with dropdown
  12. worksheet.add_validation(
  13. 'C2:C7',
  14. ValidationConditionType.one_of_list,
  15. ['Yes',
  16. 'No',]
  17. showCustomUi=True
  18. )

Documentation

Documentation\: https://gspread.readthedocs.io/

Ask Questions

The best way to get an answer to a question is to ask on Stack Overflow with a gspread tag.

Contributors

List of contributors

How to Contribute

Please make sure to take a moment and read the Code of Conduct.

Report Issues

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.

Improve Documentation

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.

Contribute code

Please make sure to read the Contributing Guide before making a pull request.