【问题标题】:Getting the error note of a formula with #NA in google sheets for a script在脚本的谷歌表格中使用#NA获取公式的错误注释
【发布时间】:2019-12-18 17:06:21
【问题描述】:

我找不到任何方法来获取失败公式的错误消息(它实际上提供了更多信息,而只是错误代码,因为对于 #NA 始终为 7)。 #NA 可能意味着不同的东西,我希望能够确定哪些单元格具有哪种类型的#NA。

getNote 不起作用。

有办法吗?

我正在使用 IMPORTXML(C1:C,"//@value")

但例如,当我查找失败时,这是我想要检索的错误消息

【问题讨论】:

  • 也许还有其他方法可以识别不同的#NA 错误?
  • 你要传递什么给getNote()?比如,() 里面是什么?
  • @Dan getNote() 是 Class Range 的一个方法,它不使用任何参数。
  • 您能否提供您在公式中引用的任何单元格的内容,以便可以复制?

标签: google-apps-script google-sheets google-sheets-importxml


【解决方案1】:

2021-02-01 更新:

作为mentioned by Tanaike,可以通过spreadsheets.get 在Sheets API 中检索错误消息。此信息可以作为ExtendedValue 的一部分找到,它对应于cell data 的属性effectiveValue

响应示例如下:

{
  "sheets": [
    {
      "data": [
        {
          "rowData": [
            {
              "values": [
                {
                  "effectiveValue": {
                    "errorValue": {
                      "type": "DIVIDE_BY_ZERO",
                      "message": "Function DIVIDE parameter 2 cannot be zero."
                    }
                  }
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

然后您可以使用 Advanced Sheet Service 通过 Apps 脚本访问此 API。例如,如果您想检索单元格 A1 的错误消息,您可以执行以下操作:

function getErrorMessage(cellNotation = "A1") {
  const optionalArgs = {
    fields: "sheets(data(rowData(values(effectiveValue))))",
    ranges: cellNotation
  }
  const spreadsheetId = SpreadsheetApp.getActive().getId();
  const response = Sheets.Spreadsheets.get(spreadsheetId, optionalArgs);
  const errorMessage = response.sheets[0].data[0].rowData[0].values[0].effectiveValue.errorValue.message;
  return errorMessage;
}

很遗憾,这不能用作自定义函数,因为它需要用户授权(请参阅Using Apps Script services)。

原答案:

据我所知,没有内置函数,没有 Apps 脚本工具也没有 API 方法可以检索这些信息。

如果您认为拥有此功能非常有用,您可以考虑在Google Issue Tracker 中创建一个功能请求。

作为一种解决方法,您可以为您正在使用的每个内置函数创建一个自定义函数,并使用 try... catch 来检索您遇到的任何异常。

希望对你有帮助。

【讨论】:

  • 非常感谢您的回答。我不是很有经验,但这意味着从脚本中包含单元格的公式,然后在有错误时捕获错误....但这适用于可以更改状态的公式,例如 importxml,这可能需要几秒钟到几分钟的时间装载?还会工作吗?这个想法实际上更多是检查一个已经有公式的单元格的状态......当我使用 importxml 进行 api 调用时,不同的单元格可能已经成功加载,而其他单元格可能有不同类型的错误,没有足够的积分,api没有返回任何结果..
  • @reraisebob 您不能在脚本中使用内置公式。我的建议是编写一个脚本函数来模拟您想要使用的内置函数的行为并处理您可能遇到的异常。
  • 当我创建一个示例脚本时,我注意到可以使用 Sheets API 中的电子表格.get 方法检索公式的错误消息。 gist.github.com/tanaikech/8a596d235205ba443452aeb510220477虽然很遗憾,在现阶段,这仍然无法仅通过内置函数来实现,但我认为当这些信息添加到您的答案中时,它可能对其他用户有用。
  • @Tanaike 感谢您的评论,它提供了非常有价值的信息。当我最初发布这个答案时,我完全错过了 API 中的那个功能。我更新了我的答案以提供更多可见性。如果您认为这可以改进,请随时编辑此答案或发布新答案。
  • @Iamblichus 感谢您回复并添加信息。我认为您的回答会对用户更有用。
猜你喜欢
  • 2020-09-09
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多