Javascript 使用GAS向选定单元格范围的单元格添加值

Javascript 使用GAS向选定单元格范围的单元格添加值,javascript,google-apps-script,google-sheets-api,Javascript,Google Apps Script,Google Sheets Api,我需要将传递的值添加到每个选定单元格的函数中(比如20.35)。我有一个巨大的列表,下面的函数会超时,它最多可以运行6分钟,而不会将添加的结果添加到单元格中 我如何找到一个解决方法,在每次一个接一个地完成计算后立即写入单元格。例如,如果它在完成10260之后过期,那么在10259之前,单元格值加上20.35,我可以通过将单元格颜色从1更改为10259来突出显示。原始颜色表示未添加的单元格 function addToCells(isAll, valueToAdd) { var she

我需要将传递的值添加到每个选定单元格的函数中(比如20.35)。我有一个巨大的列表,下面的函数会超时,它最多可以运行6分钟,而不会将添加的结果添加到单元格中

我如何找到一个解决方法,在每次一个接一个地完成计算后立即写入单元格。例如,如果它在完成10260之后过期,那么在10259之前,单元格值加上20.35,我可以通过将单元格颜色从1更改为10259来突出显示。原始颜色表示未添加的单元格

 function addToCells(isAll, valueToAdd) {
     var sheet = SpreadsheetApp.getActiveSheet();
     if (isAll)
         var range = sheet.getDataRange();
     else
         var range = sheet.getActiveRange();

     var Values = range.getValues();

     for (var i in Values) {
         for (var j in Values[i]) {
             var value = Values[i][j].toString();
             if (value) {
                 Values[i][j] = parseFloat(value) + valueToAdd;
                 //how to write Values[i][j] to cell now
             }
         }
     }
     range.setValues(Values); // this will not execute if timesout

 }

您的脚本正在将数字转换为字符串并返回,这比在数字中添加1要花费更多的时间。我知道您希望避免将字符串结尾处的“1”弄乱,并且您可能不希望所有空单元格都包含“1”。这两种方法都是通过在添加元素之前检查元素的类型来实现的:

function testadd() {
  var range = ... // whatever
  var values = range.getValues();
  var newValues = values.map(function(row) {
    return row.map(function(elem) {
      return (typeof elem == "number" ? elem + 1 : elem);
    });
  });
  range.setValues(newValues);
}

您不想为每个单元格运行单独的“setValue”,这将是一个真正的性能杀手,并且很快就会超出执行时间配额

非常感谢,但在我的情况下,这也会导致超时,因为它相当大。你能帮我间歇性地添加和放置计算数据,而不是放在末尾吗。