Python 格式为 'A2:A' 的 gspread 范围,A1 表示法

Python gspread range in format 'A2:A', A1 notation

在 gspread 中,如果我执行以下操作

wks.range('D2:D13')

没有错误。

但是,如果我想从第 2 行获取 'D' 列中的所有行,使用 A1 表示法我会得到一个错误:

wks.range('D2:D')

错误:

raise IncorrectCellLabel(label)
gspread.exceptions.IncorrectCellLabel: D

根据 gspread api 参考,Worksheet.range should be using A1 notation。 根据 Google's Sheets API documentation.

,我尝试做的事情似乎是正确的

这是怎么回事? gspread 是不支持格式还是我用错了?

  • 您想使用 D2:D 的 a1Notation 和 python 的 gspread 检索值。
  • 在当前阶段,当wks.range('D2:D')为运行时,出现您问题中显示的错误。
  • 您想知道这个错误的原因。
  • 您已经能够使用 Sheets API.
  • 获取和放置 Google Spreadsheet 的值

如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。

问题和解决方法:

当我确认the source script of range()时,当range()为运行时,发现用data = self.spreadsheet.values_get(range_label)取值。所以在这种情况下,可以使用D2:D

但是(last_row, last_column) = a1_to_rowcol(end) is run, the error occurs. The script of a1_to_rowcol() can be seen at here.

a1_to_rowcol() 被确认时,D2:DD2 return 是来自 CELL_ADDR_RE = re.compile(r'([A-Za-z]+)([1-9]\d*)') 的正则表达式的值。但是 D2:DD 不是 return 来自正则表达式的值。这样,raise IncorrectCellLabel(label)就变成了运行,然后就出现了这样的错误。

解决方法:

为了使用 D2:D 的 a1Notation 检索值,以下解决方法如何?在此解决方法中,使用了 values_get(range, params=None) 的方法。在这种情况下,D2:D 可用于从 Spreadsheet.

中检索值

示例脚本:

client = gspread.authorize(credentials)
spreadsheetId = "###"  # Please set the Spreadsheet ID.
sh = client.open_by_key(spreadsheetId)
res = sh.values_get("Sheet1!D2:D")  # Please set the a1Notation.
print(res)  # or print(res['values'])
  • 在这种情况下,将检索 Sheet1 的 sheet 单元格 D2:D 的值。
  • 当 sheet 名称未像 res = sh.values_get("D2:D") 那样使用时,将从 Spreadsheet 中的第一个选项卡检索值。

参考文献:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

前言

在调查这个特别的问题时,我发现真的很奇怪,没有一个 crystal 明确的 gspread 方法从一个 A1 符号中获取单个范围Google 工作表,但我相信这是有原因的。

如文档中所述,gspread 的创建者希望减少对 Google Sheet API 的 API 调用:https://docs.gspread.org/en/latest/user-guide.html#getting-all-values-from-a-row-or-a-column


答案

无论如何,gspread 提供了一个偷偷摸摸的方法,可以通过 batch_get 方法获得一个或多个特定范围。你应该试试:

wks.batch_get( ('D2:D',) )[0]

更好的是,如果您想一次获得几个不同的范围(通过一个 API 调用),您可以调用:

ranges = wks.batch_get( ('D2:D', 'A2:A') )