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 表格上次编辑日期

Google Sheets API v4 接收公共供稿的 HTTP 401 响应

使用C#和Sheets API v4更新Cell

国际化多语言方案i18n / class google sheets v4 api 在线文档同步json