【问题标题】:Why Class Range getValues sometimes returns [[]] when chained to Class Sheet getActiveRange?为什么当链接到 Class Sheet getActiveRange 时,Class Range getValues 有时会返回 [[]]?
【发布时间】:2020-08-09 00:18:58
【问题描述】:

Tl;博士。将getValues() 链接到班级表getActiveRange() 是一种好习惯吗?什么可能导致有时返回 [[]] 而不是预期值?

注意:[[]] 是日志/脚本执行页面中显示的内容。这些“事物”不显示字符串的引号字符。


这来自Get selected values in row,我在其中发布了一个答案,其中包含几个备选方案来获取活动范围的值。

这里特意问一下下面代码随机失败的原因

function myFunction2(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var values = sheet.getActiveRange().getValues();
  Logger.log(values);
}

发生故障时我遵循的步骤

  1. 创建一个新的电子表格
  2. 向一行添加一些值
  3. 选择行
    单击相应的行标题
  4. 单击工具 > 脚本编辑器 这将创建一个使用新运行时 (Chrome V8) 的有界项目,这是一个用于 Google Apps 脚本的默认 Google Cloud 项目
  5. 添加一个简单的函数:
function myFunction() {
  var values = SpreadsheetApp.getActiveRange().getValues();
  Logger.log(values);
}
  1. 运行 myFunction 授权脚本
  2. 运行 myFunction 以实际执行 myFunction
  3. Ctrl + Enter打开日志
  4. 在本题开头添加引用函数(myFunction2)
  5. 运行myFunction2
  6. 使用引用的键盘快捷键打开日志(步骤 7) 记录了 [[]] 而不是预期值。

  1. 添加第三个函数
function myFunction3(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var range = sheet.getActiveRange();
  var values = range.getValues();
  Logger.log(values);
}
  1. 运行myFunction3
  2. 使用引用的键盘快捷键打开日志
  3. 再次运行myFunction2
  4. 使用参考的键盘快捷键打开日志(步骤 7)。 现在已记录了预期值。

以下是使用 Class Sheet getActiveRange()getRow()getValues() 等一些 Class Range 方法链接的问题,但当前答案没有提及问题的原因,它们只是提供了替代代码

我已经搜索了Issue Tracker。虽然有一些与 getActiveRange 相关的问题,例如 Calls to .getActiveRange() don't return correct cells as seen in filter viewsgetActiveRange() incorrect in onChange trigger for some column/row operations 等,但它们似乎与此问题没有直接关系。


截至 2020 年 8 月 9 日(UTC),相同的电子表格/有界脚本正在返回预期值,无论如何我添加了另一个函数来测试 getValues()getRow()getColumn()getA1Notation() 和 @987654355 @。都返回了预期值。

我刚刚发现另一个关于 getActiveRange() 的类似问题的问题 -> getActiveRange not returning current selection。这个问题不是重复的,因为该问题只提到在 24 小时后它再次工作,但没有提到将 Class Range 方法链接到 getActiveRange() 是否是一种好习惯,并且当前的答案没有解释为什么会发生这种情况。

【问题讨论】:

标签: javascript google-apps-script google-sheets method-chaining


【解决方案1】:

到目前为止,我的结论基于问题的 cmets 以及使用链接的相关问题,答案使用等效代码但不使用链接我认为避免使用“活动”链接更安全方法。

我的意思是主动方法

  • 班级电子表格getActiveSheet()
  • 班级电子表格和班级工作表getActiveRange()

相关聊天室

  • chat我创建的
  • chat 由 Oleg Valter 创建
  • chat 由 ♦ 模组创建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 2021-08-21
    • 1970-01-01
    • 2012-08-03
    相关资源
    最近更新 更多