跳转到主要内容

Google Spreadsheets Python API

项目描述

Google Spreadsheets Python API v4

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

用于处理Google Sheets的简单接口。

功能

  • 通过标题、密钥或URL打开电子表格。
  • 读取、写入和格式化单元格范围。
  • 共享和访问控制。
  • 批量更新。

安装

pip install gspread

需求:Python 3.8+。

基本用法

  1. 在Google API控制台中创建凭据

  2. 开始使用gspread

import gspread

gc = gspread.service_account()

# Open a sheet from a spreadsheet in one go
wks = gc.open("Where is the money Lebowski?").sheet1

# Update a range of cells using the top left corner address
wks.update([[1, 2], [3, 4]], "A1")

# Or update a single cell
wks.update_acell("B42", "it's down there somewhere, let me take another look.")

# Format the header
wks.format('A1:B1', {'textFormat': {'bold': True}})

从v5.12到v6.0迁移指南

从Python 3.7升级

Python 3.7 已达到生命周期的结束。gspread v6 至少需要 Python 3.8。

更改 Worksheet.update 参数

前两个参数(valuesrange_name)已交换(变为 range_namevalues)。可以交换它们(仅在 v6 中有效),或者使用命名参数(在 v5 和 v6 中都有效)。

此外,values 不能再是列表,而必须是二维数组。

- file.sheet1.update([["new", "values"]])
+ file.sheet1.update([["new", "values"]]) # unchanged

- file.sheet1.update("B2:C2", [["54", "55"]])
+ file.sheet1.update([["54", "55"]], "B2:C2")
# or
+ file.sheet1.update(range_name="B2:C2", values=[["54", "55"]])

更多

查看更多迁移指南

将颜色从字典更改为文本

v6 使用十六进制颜色表示。将所有颜色更改为十六进制。可以使用兼容函数 gspread.utils.convert_colors_to_hex_value() 将字典转换为十六进制字符串。

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

将 lastUpdateTime 从属性更改为方法

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

替换方法 Worksheet.get_records

在 v6 中,现在您只能使用 Worksheet.get_all_records() 获取所有工作表记录。已删除 Worksheet.get_records() 方法。您可以通过自己的获取操作获取一些记录,并使用 gspread.utils.to_records() 将它们组合起来。

+ 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)

静音警告

在版本 5 中,有许多警告用于标记已弃用的功能/函数/方法。可以通过将环境变量 GSPREAD_SILENCE_WARNINGS 设置为 1 来静音它们。

gspread.Worksheet.__init__ 添加更多数据

  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)

更多示例

打开电子表格

# You can open a spreadsheet by its title as it appears in Google Docs
sh = 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 url
sht2 = 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('otto@example.com', perm_type='user', role='writer')

选择工作表

# Select worksheet by index. Worksheet indexes start from zero
worksheet = sh.get_worksheet(0)

# By title
worksheet = sh.worksheet("January")

# Most common case: Sheet1
worksheet = sh.sheet1

# Get a list of all worksheets
worksheet_list = sh.worksheets()

创建工作表

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

删除工作表

sh.del_worksheet(worksheet)

获取单元格值

# With label
val = worksheet.get('B1').first()

# With coords
val = worksheet.cell(1, 2).value

获取一行或一列的所有值

# Get all values from the first row
values_list = worksheet.row_values(1)

# Get all values from the first column
values_list = worksheet.col_values(1)

以列表列表的形式获取工作表的所有值

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

获取值范围

仅接收有值的单元格。

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

接收围绕有值单元格的矩形数组。

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

接收与请求大小匹配的数组,无论值是否为空。

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

查找单元格

# Find a cell with exact string value
cell = worksheet.find("Dough")

print("Found something at R%sC%s" % (cell.row, cell.col))

# Find a cell matching a regular expression
amount_re = re.compile(r'(Big|Enormous) dough')
cell = worksheet.find(amount_re)

查找所有匹配的单元格

# Find all cells with string value
cell_list = worksheet.findall("Rug store")

# Find all cells with regexp
criteria_re = re.compile(r'(Small|Room-tiering) rug')
cell_list = worksheet.findall(criteria_re)

更新单元格

# Update a single cell
worksheet.update_acell('B1', 'Bingo!')

# Update a range
worksheet.update([[1, 2], [3, 4]], 'A1:B2')

# Update multiple ranges at once
worksheet.batch_update([{
    'range': 'A1:B2',
    'values': [['A1', 'B1'], ['A2', 'B2']],
}, {
    'range': 'J42:K43',
    'values': [[1, 2], [3, 4]],
}])

获取未格式化的单元格值或公式

from gspread.utils import ValueRenderOption

# Get formatted cell value as displayed in the UI
>>> worksheet.get("A1:B2")
[['$12.00']]

# Get unformatted value from the same cell range
>>> worksheet.get("A1:B2", value_render_option=ValueRenderOption.unformatted)
[[12]]

# Get formula from a cell
>>> worksheet.get("C2:D2", value_render_option=ValueRenderOption.formula)
[['=1/1024']]
### Add data validation to a range

```python
import gspread
from gspread.utils import ValidationConditionType

# Restrict the input to greater than 10 in a single cell
worksheet.add_validation(
  'A1',
  ValidationConditionType.number_greater,
  [10],
  strict=True,
  inputMessage='Value must be greater than 10',
)

# Restrict the input to Yes/No for a specific range with dropdown
worksheet.add_validation(
  'C2:C7',
   ValidationConditionType.one_of_list,
   ['Yes',
   'No',]
   showCustomUi=True
)

文档

文档: https://gspread.readthedocs.io/

提问

在带有 gspread 标签的 Stack Overflow 上提问是获取答案的最佳方式。

贡献者

贡献者列表

如何贡献

请花点时间阅读 行为准则

报告问题

请通过 GitHub Issues 报告错误和提出功能建议。

在提交问题之前,请在跟踪器中搜索可能的重复项。如果您发现重复项,请添加一条评论,说明您也遇到了该问题。

改进文档

文档 与代码一样重要。如果您知道如何使其更一致、可读和清晰,请提交一个拉取请求。文档文件位于 docs 文件夹中,使用 reStructuredText 标记,并由 Sphinx 渲染。

贡献代码

在提交拉取请求之前,请确保阅读 贡献指南

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

gspread-6.1.3.tar.gz (78.3 kB 查看哈希值)

上传时间

构建分布

gspread-6.1.3-py3-none-any.whl (57.6 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面