簡體   English   中英

格式為“A2:A”的 Python 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 應該使用 A1 notation 根據Google 的 Sheets API 文檔,我正在嘗試做的事情似乎是正確

這里發生了什么? gspread 不支持該格式還是我使用錯誤?

  • 您想使用帶有 python 的 gspread 使用D2:D的 a1Notation 檢索值。
  • 在當前階段,當wks.range('D2:D')運行時,會出現您的問題中顯示的錯誤。
  • 您想知道此錯誤的原因。
  • 您已經能夠使用 Sheets API 獲取和放置 Google 電子表格的值。

如果我的理解是正確的,這個答案怎么樣? 請將此視為幾種可能的答案之一。

問題和解決方法:

當我確認range()的源腳本時,當range()運行時,發現使用data = self.spreadsheet.values_get(range_label)檢索值。 所以在這種情況下,可以使用D2:D

但是(last_row, last_column) = a1_to_rowcol(end)運行時,出現錯誤。 a1_to_rowcol()的腳本可以在這里看到。

a1_to_rowcol()被確認時, D2 D2:DD2:DCELL_ADDR_RE = re.compile(r'([A-Za-z]+)([1-9]\\d*)')的正則表達式中返回值。 但是DD2:D不會從正則表達式返回值。 通過這個, raise IncorrectCellLabel(label)被運行,然后,發生這樣的錯誤。

解決方法:

為了使用D2:D的 a1Notation 檢索值,以下解決方法如何? 在此解決方法中,使用了values_get(range, params=None)方法。 在這種情況下, D2:D可用於從電子表格中檢索值。

示例腳本:

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表上Sheet1D2:D的值。
  • 當沒有像res = sh.values_get("D2:D")那樣使用工作表名稱時,將從電子表格的第一個選項卡中檢索值。

參考:

如果我誤解了您的問題並且這不是您想要的方向,我深表歉意。

前言

在調查這個特別的問題時,我發現沒有一種非常清晰的gspread方法可以從 Google 工作表中以 A1 表示法獲取單個范圍,這真的很奇怪,但我相信這是有原因的。

如文檔中所述,gspread 的創建者希望減少對 Google Sheet API 的 API 調用: https ://docs.gspread.org/en/latest/user-guide.html#getting-all-values-from- 一行或一列


答案

不管怎么說,有一個偷偷摸摸gspread提供方法得到一個特別的范圍或范圍(多個)經由batch_get方法。 你應該試試:

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

更好的是,如果您想一次獲得幾個不同的范圍(通過一個 API 調用),您可以調用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM