Smartsheet - 如何找到 sheet 中的总页数?

Smartsheet - How to find total number of pages in a sheet?

我想通过这样的查询 https://api.smartsheet.com/2.0/sheets/{sheetId}?rowsModifiedSince={date}&pageSize=20&page=10 按页获取 sheet 上的所有记录 但响应没有 totalPages 或类似参数。如何找到 sheet 中的总页数?

当然,我可以查看当前页面的行数。如果它等于 'pageSize' 参数,则下一个 sheet 存在。这似乎不正确,因为 sheet 可以是行数的倍数。

Get Sheet 响应包含一个 totalRowCount 参数,该参数指定 sheet 中的总行数。您可以计算总页数(即 Get Sheet 请求的总数,您需要提交这些请求以检索 sheet 中的所有行) 通过将 totalRowCount 值除以您在请求查询字符串中指定的 pageSize 值,并将结果四舍五入到下一个整数。

例如,如果:

  • 您的请求指定 pageSize=20(例如,https://api.smartsheet.com/2.0/sheets/{sheetId}?pageSize=20&page=1)。

  • GetSheet响应中totalRowCount参数的值为105.

这意味着您需要提交 6 个 Get Sheet 请求(每个请求指定 pageSize=20)以检索 sheet(因为totalRowCount/pageSize = 105/20 = 5.25,四舍五入到下一个整数是6)。前 5 个响应(页面)中的每一个都包含 20 行,第 6 个响应将包含剩余的 5 行。

** 更新#1 **

如果您指定查询字符串参数(例如,rowsModifiedSince),则上述策略将不起作用——因为 totalRowCount 的值始终表示中的总行数sheet,它不一定等于满足您通过查询字符串参数指定的条件的行数。在这种情况下,您可以继续提交 Get Sheet 请求,每次递增 page 参数的值,直到您收到响应 rows 属性 是一个空数组(如下响应示例所示)——这表示您请求的上一页是结果的最后一页。

{
    "id": 3932034054809476,
    ...
    "rows": []
}

** 更新#2 **

不幸的是,我发现 Smartsheet 与上述方法的行为不一致。

  • 如果包含结果的最后一页 是整页 结果,则对请求的响应下一页结果将 return 一个空的 rows[] 数组。例如,如果有 4 行满足我指定的条件,并且我在每个请求中指定 pageSize=2——那么前两页将分别包含 2 行和第三页(即发出的请求中包含 pageSize=2&page=3查询字符串)将 return 一个空的 rows[] 数组。

  • 但是,如果包含结果的最后一页 不是整页 结果,则响应对下一页结果的请求 return 又是最后一页结果。例如,如果有 3 行满足我指定的条件,并且我在每个请求中指定 pageSize=2——那么第一页包含 2 行,第二页包含 1 行,第三页(即发出的请求带有 pageSize=2&page=3 在查询字符串中)将包含与 previous/last 结果页中相同的行——即,与 return 为 page=2 编辑的相同的 1 行。

不幸的是,这意味着您可能不得不采取一些措施,例如跟踪您在每个响应中收到的行 id 值(如果您收到的响应包含行 id 您之前收到过,这表明您之前请求的页面实际上是结果的最后一页)。