Excel API 的错误处理

本文提供有关处理通过 API 发送的请求失败时 Microsoft Graph 中 Excel API 返回的错误的一般说明和建议。

错误响应的类型

Microsoft Graph 中的 Excel API 返回两种类型的错误。 一个是常规错误响应,如下所示。

HTTP/1.1 <HTTP status code>
Content-type: application/json
Retry-After: <Cooldown duration in seconds> (optional)

{
  "error": <Error object>
}

第二种模式来自长时间运行的操作模式,该模式可以在响应正文中返回 200 OK HTTP 状态代码和 failed 操作状态,如以下示例所示。

HTTP/1.1 200 OK
Content-type: application/json

{
  "status": "failed",
  "error": <Error object>
}

对于这两个错误响应,error 对象具有以下结构。

注意

错误响应遵循错误响应 OData v4 规范中的定义。

{
  "code": "string",
  "message": "string",
  "innerError": { "@odata.type": "odata.error" }
}

innerError 对象可能以递归方式包含更多的 innerError 对象,并带有其他更具体的错误代码。 例如,错误对象可能会在第二级错误代码和消息中包含更详细的错误信息,如下所示。

{
  "code": "Top-level error code",
  "message": "Top-level error message",
  "innerError": {
    "code": "Second-level error code",
    "message": "Second-level error message",
    "innerError": { "@odata.type": "odata.error" }
  }
}

处理错误响应的步骤

Microsoft Graph 客户端应使用以下步骤来处理 Excel API 发生的错误。

1.确定它是否是长时间运行的操作错误

在处理错误之前,第一步是确定错误响应来自长时间运行的操作模式还是常规模式。 长时间运行的操作错误将在响应正文中返回 200 OK HTTP 状态代码和 failed 操作状态。 常规错误响应将返回相应的 HTTP 错误状态代码。

2. 分析二级错误代码

对于长时间运行的操作模式和常规模式,客户端应首先分析所需的二级错误代码,并根据说明进行处理。 (可选)客户端还可以处理其他二级错误代码,或选择回退到 顶级错误代码状态代码

错误代码不区分大小写。

必需的二级错误代码

下表列出了 Microsoft Graph 客户端应处理的必需第二级错误代码的说明。 该服务可能随时添加新错误代码。

代码 说明
accessConflict 失败的请求与其他访问工作簿的客户端冲突 (例如,另一个客户端已锁定工作簿进行编辑) 。 在冲突解决之前,Microsoft Graph 客户端不会重新发送失败的请求。 最终用户可以选择使用 Excel Online 手动执行相同的操作,以获取有关冲突的更多详细信息。
badRequestUncategorized 在失败的请求中发现了未指定的错误。 预计 Microsoft Graph 客户端不会重新发送失败的请求。
conflictUncategorized 失败的请求与某些服务器状态冲突。 在冲突解决之前,Microsoft Graph 客户端不会重新发送失败的请求。 最终用户可以选择使用 Excel Online 手动执行相同的操作,以获取有关冲突的更多详细信息。
forbiddenUncategorized 不允许失败的请求。 预计 Microsoft Graph 客户端不会重新发送失败的请求。 最终用户可以选择使用 Excel Online 手动执行相同的操作,以获取有关限制的更多详细信息。
gatewayTimeoutUncategorized 服务无法在时限内完成请求。
internalServerErrorUncategorized 发生未指定错误。 预计 Microsoft Graph 客户端不会重新发送失败的请求。 如果在失败的请求中指定了会话,则也不应进一步访问该会话。
invalidSessionAccessConflict 请求中指定的会话无效,因为与访问工作簿的其他客户端发生冲突 (例如,另一个客户端已锁定工作簿进行编辑) 。 不应进一步访问失败请求中指定的会话。 在冲突解决之前,不应使用相同的 createSession 请求重新创建会话。 使用其他 createSession 请求重新创建会话可能会成功,也可能不成功。 最终用户可以选择使用 Excel Online 手动执行相同的操作,以获取有关冲突的更多详细信息。
invalidSessionAuthentication 由于身份验证错误,请求中指定的会话无效。 不应进一步访问失败请求中指定的会话。 在提供适当的身份验证信息之前,不应使用相同的 createSession 请求重新创建会话。
invalidSessionNotFound 请求中指定的会话无效,因为找不到工作簿。 不应进一步访问失败请求中指定的会话。 不应使用相同的 createSession 请求重新创建会话。
invalidSessionReCreatable 请求中指定的会话不存在,或者由于暂时性错误而无效。 Microsoft Graph 客户端可以尝试重新创建会话并恢复工作。 不应进一步访问失败请求中指定的会话。
invalidSessionRestricted 由于服务配置或限制,请求中指定的会话无效。 不应进一步访问失败请求中指定的会话。 在阻止请求的限制或配置发生更改之前,不应使用相同的 createSession 请求重新创建会话。 使用其他 createSession 请求重新创建会话可能会成功,也可能不成功。 最终用户可以选择使用 Excel Online 手动执行相同的操作,以获取有关限制的更多详细信息。
invalidSessionUnexpected 请求中指定的会话由于意外问题而无效。 不应进一步访问失败请求中指定的会话。 不应使用相同的 createSession 请求重新创建会话。 使用其他 createSession 请求重新创建会话可能会成功,也可能不成功。
invalidSessionUnsupportedWorkbook 请求中指定的会话无效,因为工作簿包含不支持的功能或超出大小限制。 通常,不受支持的因素是由访问工作簿的另一个客户端引入的。 不应进一步访问失败请求中指定的会话。 在删除不受支持的因素之前,不应使用相同的 createSession 请求重新创建会话。 使用其他 createSession 请求重新创建会话可能会成功,也可能不成功。 最终用户可以选择使用 Excel Online 手动执行相同的操作,以获取不受支持的因素的更多详细信息,或者使用 Excel Desktop(可能支持工作簿)。
methodNotAllowedUncategorized 资源上不允许使用请求中指定的 HTTP 方法。 预计 Microsoft Graph 客户端不会重新发送失败的请求。
notFoundUncategorized 找不到请求的资源。 预计 Microsoft Graph 客户端不会重新发送失败的请求。
notImplementedUncategorized 请求的功能当前未实现。 预计 Microsoft Graph 客户端不会重新发送失败的请求。
payloadTooLargeUncategorized 请求有效负载超出大小限制。 预计 Microsoft Graph 客户端不会重新发送失败的请求。
serviceUnavailableUncategorized 服务暂时不可用或已重载。 在指定的冷却持续时间过后,Microsoft Graph 客户端不会重新发送失败的请求。
tooManyRequestsUncategorized 失败的请求超出了特定频率限制。 在指定的冷却持续时间过后,Microsoft Graph 客户端不会重新发送失败的请求。 有关减少限制的最佳做法,请参阅 减少限制错误
transientFailure 由于暂时性错误,请求失败。 在指定的冷却持续时间过后,Microsoft Graph 客户端不会重新发送失败的请求。
unauthorizedUncategorized 资源所需的身份验证信息缺失或无效。 预计 Microsoft Graph 客户端不会重新发送失败的请求。
unsupportedWorkbook 请求失败。 工作簿包含不支持的功能或超出大小限制。 在删除不受支持的因素之前,Microsoft Graph 客户端不会重新发送失败的请求。

注意

对于常规模式,失败的请求定义为与响应对应的请求。 对于长时间运行的操作模式,失败的请求是触发失败操作的请求。

可选的第二级错误代码示例

下表列出了可选的第二级错误代码的示例,包括每个错误代码的相应处理说明。 该服务可能随时添加新错误代码。

代码 说明
accessDenied 例如,无法执行请求的操作 (对锁定的单元格执行更改) 。 预计 Microsoft Graph 客户端不会重新发送失败的请求。
filteredRangeConflict 操作失败,因为它与筛选的范围冲突。 预计 Microsoft Graph 客户端不会重新发送失败的请求。
generalException 处理请求时发生内部错误。 预计 Microsoft Graph 客户端不会重新发送失败的请求。
insertDeleteConflict 尝试的插入或删除操作导致冲突。 预计 Microsoft Graph 客户端不会重新发送失败的请求。 最终用户可以选择使用 Excel Online 手动执行相同的操作,以获取有关冲突的更多详细信息。
invalidArgument 参数无效、缺失或格式不正确。 预计 Microsoft Graph 客户端不会重新发送失败的请求。
invalidReference 此引用对于当前操作无效。 预计 Microsoft Graph 客户端不会重新发送失败的请求。
itemAlreadyExists 所创建的资源已存在。 预计 Microsoft Graph 客户端不会重新发送失败的请求。
itemNotFound 所请求的资源不存在。 预计 Microsoft Graph 客户端不会重新发送失败的请求。
methodNotAllowed 资源上不允许使用请求中指定的 HTTP 方法。 预计 Microsoft Graph 客户端不会重新发送失败的请求。
nonBlankCellOffSheet 无法插入新单元格,因为它会将非空单元格从工作表的末尾推送。 预计 Microsoft Graph 客户端不会重新发送失败的请求。 最终用户可以删除行或列,以便为要插入的内容腾出空间,然后重试。
rangeExceedsLimit 区域中的单元格计数已超过支持的最大数目。 Microsoft Graph 客户端可以尝试发送范围较小的请求。 有关详细信息,请参阅 Office 外接程序的资源限制和性能优化
requestAborted 请求在运行时中止,这通常是由工作簿中的函数长时间计算引起的。 预计 Microsoft Graph 客户端不会重新发送失败的请求。
unsupportedOperation 不支持正在尝试的操作。 预计 Microsoft Graph 客户端不会重新发送失败的请求。

注意

对于常规模式,失败的请求定义为与响应对应的请求。 对于长时间运行的操作模式,失败的请求是触发失败操作的请求。

3.分析顶级错误代码

如果找不到任何已知的第二级错误代码,则应按照针对顶级错误提供的说明进行操作。 顶级错误代码绑定到状态代码,你可以根据相应的状态代码采取措施。 有关顶级错误代码和消息的详细信息,请参阅 错误代码和消息

4.分析状态代码

对于常规模式,如果找不到任何已知的第二级错误代码或顶级错误代码,则应根据 HTTP 状态代码采取措施。

5. 故障恢复冷却时间

对于常规模式中的某些响应,可以通过标头提供 Retry-After 恢复冷却持续时间(以秒为单位)。 当存在恢复冷却持续时间时,Microsoft Graph 客户端预计不会在指定的持续时间之前发送任何后续请求。 有关标头和限制的 Retry-After 最佳做法,请参阅 减少限制错误

诊断信息

响应中未在上述步骤中使用的所有内容仅用于诊断目的, () 的消息字段中包含字符串。 我们不建议依赖这些内容,因为它们可能会在未通知的情况下更改。

特殊案例处理

对于 会话请求,如果遇到 502/badGateway503/serviceUnavailable 错误,在找到已知的第二级错误代码时,请按照相应的说明进行操作;否则,应直接重新创建会话。