GSpread - 阅读时也得到 None 值?
GSpread - get also None-values when reading?
我想使用 gspread 从 google sheet 中读取数据 - 但我还想要嵌套列表中的 None 值 -
我用下面的代码读取数据,它工作正常:
FN = "TestSheetGSPREAD"
wb1 = gc.open (FN)
ws1 = wb1.get_worksheet(0)
data = ws1.get('A3:H100').value
在 google sheet 中只有第一列 A 被填充 - 其余列为空。
现在我得到了这个结果:
[['AAPL'], ['FB'], ['MSFT'], ['AMZN'], ['CAT'], ['V'], ['BAYN.DE']]
但我还想要结果中的 None / "" 值 - 例如:
[['AAPL',None,None,None,None,None,None,None],...]
这是否可以使用 Gspread 实现?
问题和解决方法:
遗憾的是,现阶段使用Sheets API的spreadsheets.values.get和spreadsheets.values.batchGet方法时,列尾空单元格无法检索为""
。当使用spreadsheets.get的方法时,可以通过检查userEnteredValue
和effectiveValue
来确认""
等列末尾的空单元格。但在这种情况下,脚本有点复杂。所以在这个答案中,作为一种解决方法,我想提出以下流程。
- 将电子表格导出为 CSV 数据。在这种情况下,您可以使用范围。
- 将 CSV 数据解析为列表。
通过这个流程,我认为您的目标可能可以实现。当此解决方法反映到您的脚本中时,它会变成如下。
修改后的脚本:
gc = gspread.authorize(credentials) # About "credentials", please use your script here.
FN = "TestSheetGSPREAD"
wb1 = gc.open(FN)
ws1 = wb1.get_worksheet(0)
access_token = credentials.get_access_token().access_token
rng = 'A3:H100'
url = 'https://docs.google.com/spreadsheets/d/' + wb1.id + '/gviz/tq?tqx=out:csv&gid=' + str(ws1.id) + '&range=' + quote(rng)
headers = {'Authorization': 'Bearer ' + access_token}
res = requests.get(url, headers=headers)
data = list(csv.reader(io.StringIO(res.text)))
print(data)
# If you want to convert "" to None, please use the following script.
result = [[c or None for c in r] for r in data]
print(result)
参考:
我想使用 gspread 从 google sheet 中读取数据 - 但我还想要嵌套列表中的 None 值 -
我用下面的代码读取数据,它工作正常:
FN = "TestSheetGSPREAD"
wb1 = gc.open (FN)
ws1 = wb1.get_worksheet(0)
data = ws1.get('A3:H100').value
在 google sheet 中只有第一列 A 被填充 - 其余列为空。
现在我得到了这个结果:
[['AAPL'], ['FB'], ['MSFT'], ['AMZN'], ['CAT'], ['V'], ['BAYN.DE']]
但我还想要结果中的 None / "" 值 - 例如:
[['AAPL',None,None,None,None,None,None,None],...]
这是否可以使用 Gspread 实现?
问题和解决方法:
遗憾的是,现阶段使用Sheets API的spreadsheets.values.get和spreadsheets.values.batchGet方法时,列尾空单元格无法检索为""
。当使用spreadsheets.get的方法时,可以通过检查userEnteredValue
和effectiveValue
来确认""
等列末尾的空单元格。但在这种情况下,脚本有点复杂。所以在这个答案中,作为一种解决方法,我想提出以下流程。
- 将电子表格导出为 CSV 数据。在这种情况下,您可以使用范围。
- 将 CSV 数据解析为列表。
通过这个流程,我认为您的目标可能可以实现。当此解决方法反映到您的脚本中时,它会变成如下。
修改后的脚本:
gc = gspread.authorize(credentials) # About "credentials", please use your script here.
FN = "TestSheetGSPREAD"
wb1 = gc.open(FN)
ws1 = wb1.get_worksheet(0)
access_token = credentials.get_access_token().access_token
rng = 'A3:H100'
url = 'https://docs.google.com/spreadsheets/d/' + wb1.id + '/gviz/tq?tqx=out:csv&gid=' + str(ws1.id) + '&range=' + quote(rng)
headers = {'Authorization': 'Bearer ' + access_token}
res = requests.get(url, headers=headers)
data = list(csv.reader(io.StringIO(res.text)))
print(data)
# If you want to convert "" to None, please use the following script.
result = [[c or None for c in r] for r in data]
print(result)