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:D
的 D2
return 是来自 CELL_ADDR_RE = re.compile(r'([A-Za-z]+)([1-9]\d*)')
的正则表达式的值。但是 D2:D
的 D
不是 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') )
在 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:D
的 D2
return 是来自 CELL_ADDR_RE = re.compile(r'([A-Za-z]+)([1-9]\d*)')
的正则表达式的值。但是 D2:D
的 D
不是 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') )