使用GAS将单元格的值添加到选定的单元格区域

时间:2017-09-16 13:27:17

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

我需要将传递的值添加到函数(比如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 个答案:

答案 0 :(得分:1)

您的脚本正在将数字转换为字符串并返回,这比向数字添加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"对于每个单元格来说,这将是一个真正的性能杀手,很快就会让你超出执行时间限额。