【问题标题】:Google Script stops running because there are no passed arguments谷歌脚本停止运行,因为没有传递参数
【发布时间】:2017-01-24 17:15:18
【问题描述】:

我有一个多年来一直在谷歌表格中使用的功能,它工作得很好。在我创建了一个新的工作表文档并添加了该功能后,它停止了工作。我一直在试图弄清楚谷歌在他们的 API 中发生了什么变化,但没有任何成功。这是我的功能:

/**
 * Sums a cell across all sheets
 * 
 * @param {string} cell The cell (i.e. "B2")
 * @return number
 * @customfunction 
 */
function sumAllSheets(cell) 
{

  var sum = 0;
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var activeSheet = ss.getActiveSheet().getName();
  var sheets = ss.getSheets();

  for (var i=1; i < sheets.length; i++) {
    var sheet = sheets[i];
    var sheetName = sheet.getName();
    var sheetRange = sheet.getRange(cell);
    sum += parseInt(sheetRange.getValue());
  }

  return sum;
}

基本上做的是遍历所有表格并将单个单元格中的值求和(即所有表格中的单元格B2)。在以前的版本中,我可以通过调用函数=sumAllSheets("B2") 将参数cell 作为字符串传递。这工作得很好。然而,随着新的更新,cell 参数是undefined。任何想法有什么问题或已更改?我在谷歌文档中找不到任何东西。

【问题讨论】:

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


    【解决方案1】:

    您是否从总和中排除第一张纸?如果不是,“i”应在循环的第一条语句中设置为 0。也试试你的代码的这种变体

    function sumAllSheets(cell) {
    
    var sum = 0;
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheets = ss.getSheets();
    for (var i = 0; i < sheets.length; i++) {
        var v = sheets[i].getRange(cell)
            .getValue();
        sum += parseInt(v ? v : 0);
    }
    
    return sum;
    }
    

    这是一个替代版本

    function sumCellOnAllSheets(cell) {
    return SpreadsheetApp.getActive()
        .getSheets()
        .map(function (sh) {
            return Number(sh.getRange(cell)
                .getValue())
        })
        .reduce(function (a, b) {
            return a + b;
        })
    }
    

    【讨论】:

    • 是的,我不包括第一张纸,因为那是我显示摘要的地方。但是您的代码实际上给了我问题的答案。出于某种未知的原因,当我删除了我的函数上方的评论(更具体地说是这一行` * @customfunction`)时 - 一切又开始正常工作了。可悲的是,我在这个“非问题”上浪费了 4 个小时……感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多