Google Sheets API v4 - 如何获得最后一行的价值?
Posted
技术标签:
【中文标题】Google Sheets API v4 - 如何获得最后一行的价值?【英文标题】:Google Sheets API v4 - How to get the last row with value? 【发布时间】:2016-09-16 20:06:03 【问题描述】:如何在新的 Google Sheets API v4 中获取最后一行的值?
我使用它从工作表中获取范围:
mService.spreadsheets().values().get("ID_SHEET", "Sheet1!A2:B50").execute();
如何检测工作表中具有值的最后一行?
【问题讨论】:
【参考方案1】:您可以将范围设置为“A2:D”,这将获取工作表中的最后一个数据行。
【讨论】:
是的,但是这样你可能会获取大量数据,内存分配可能是个问题。【参考方案2】:我设法通过计算当前表格中的总行数来得到它。 然后将数据追加到下一行。
rowcount = this.mService.spreadsheets().values().get(spreadsheetId, range).execute().getValues().size()
【讨论】:
如果您想在末尾追加更多行,请参阅this【参考方案3】:您可以使用 append API 将空表追加到工作表的末尾,然后解析响应中返回的范围,而不是将所有行检索到内存中以获取最后一行中的值.然后,您可以使用最后一行的索引来请求您想要的数据。
这个例子是用 Python 编写的:
#empty table
table =
'majorDimension': 'ROWS',
'values': []
# append the empty table
request = service.spreadsheets().values().append(
spreadsheetId=SPREADSHEET_ID,
range=RANGE_NAME,
valueInputOption='USER_ENTERED',
insertDataOption='INSERT_ROWS',
body=table)
result = request.execute()
# get last row index
p = re.compile('^.*![A-Z]+\d+:[A-Z]+(\d+)$')
match = p.match(result['tableRange'])
lastrow = match.group(1)
# lookup the data on the last row
result = service.spreadsheets().values().get(
spreadsheetId=SPREADSHEET_ID,
range=f'Sheetname!Alastrow:ZZlastrow'
).execute()
print(result)
【讨论】:
这是最好的方法,因为附加一个空表实际上是一个轻量级的请求。我听从了您的建议,并创建了一个方法来获取具有值的范围。【参考方案4】:? Google Sheets API v4 没有响应来帮助您获取工作表中最后写入的行的索引(其下方的所有单元格均为空的行)。可悲的是,您必须解决问题并将所有工作表行提取到内存中(如果我弄错了,我敦促您发表评论)
示例:
spreadsheet_id = '1TfWKWaWypbq7wc4gbe2eavRBjzuOcpAD028CH4esgKw'
range = 'Sheet1!A:Z'
rows = service.spreadsheets().values().get(spreadsheetId=spreadsheet_id, range=range).execute().get('values', [])
last_row = rows[-1] if rows else None
last_row_id = len(rows)
print(last_row_id, last_row)
输出:
13 ['this', 'is ', 'my', 'last', 'row']
?如果你想在最后一行追加更多行,see this
【讨论】:
【参考方案5】:你不需要。设置一个很大的范围(例如A2:D5000
)以保证您的所有行都将位于其中。不知道会不会有进一步的影响,可能是内存消耗增加什么的,但目前还可以。
private List<String> getDataFromApi() throws IOException
String spreadsheetId = "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms";
String range = "A2:D5000";
List<String> results = new ArrayList<String>();
ValueRange response = this.mService.spreadsheets().values()
.get(spreadsheetId, range)
.execute();
List<List<Object>> values = response.getValues();
if (values != null)
results.add("Name, Major");
for (List row : values)
results.add(row.get(0) + ", " + row.get(3));
return results;
查看循环for (List row : values)
。如果您的表格中有两行,您将在values
列表中获得两个元素。
【讨论】:
您不需要设置很大的限制,只需指定“A2:D”即可找到 A、B、C、D 的最后一个值。 没错!谢谢!那时我还没有足够的经验:) @AndrasGyomrey 您是否也知道如何仅获取具有值的单元格 - 而无需先将它们取回并过滤掉?就像有一个内置方法只在特定范围内检索它们> @Yaakov5777 我最近没有处理这个问题。但我记得我必须自己做一些规范化,因为 API 跳过空单元格没有询问。以上是关于Google Sheets API v4 - 如何获得最后一行的价值?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Sheets API v4 Java 阅读整个 Google 电子表格
使用Sheets API v4获取与Google帐户关联的所有电子表格列表
使用 Sheets API v4 (Java) 获取 Google 表格上次编辑日期