Smartsheet api Smartsheet-如何查找工作表中的总页数?

Smartsheet api Smartsheet-如何查找工作表中的总页数?,smartsheet-api,Smartsheet Api,我想通过这样的查询一页一页地获取所有记录https://api.smartsheet.com/2.0/sheets/{sheetId}?rowsModifiedSince={date}&pageSize=20&page=10 但响应没有totalPages或类似参数。如何查找工作表中的总页数 当然,我可以检查当前页面上的行数。如果它等于“pageSize”参数,则存在下一张工作表。这似乎不正确,因为工作表上的行数可能是行数的倍数。Get sheet响应包含一个指定工作表中总行数的totalRow

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


当然,我可以检查当前页面上的行数。如果它等于“pageSize”参数,则存在下一张工作表。这似乎不正确,因为工作表上的行数可能是行数的倍数。

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

例如,如果:

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

  • totalRowCount
    参数在Get Sheet响应中的值是
    105

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

**更新#1**

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

{
    "id": 3932034054809476,
    ...
    "rows": []
}
**更新#2**

不幸的是,我看到Smartsheet使用上述方法时出现了不一致的行为

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

  • 但是,如果带有结果的最后一页不是完整的结果页,那么对下一页结果请求的响应将再次返回最后一页结果。e、 例如,如果有3行符合我指定的条件,并且我在每个请求中指定了
    pageSize=2
    ,那么第一个页面包含2行,第二个页面包含1行,第三个页面(即,在查询字符串中使用
    pageSize=2&page=3
    发出的请求)将包含与上一页/最后一页结果相同的行,即为
    page=2
    返回的同一行


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

如果使用
rowsModifiedSince
参数,则实际行数减少,但
totalRowCount
字段中的值保持不变。啊,是--
totalRowCount
指定工作表中的总行数。我已经更新了我的答案来描述另一个应该对你有用的策略。它不起作用。从文档:
如果指定的页码大于总页数,则返回最后一页。
似乎Smartsheet行为在这方面不一致。更多信息,请参见我答案中的更新#2。