2017-09-16 40 views
0

添加值至細胞至細胞的選定範圍我需要傳遞的值添加到函數(比如20.35)到每個選定的細胞。我有一個巨大的名單和功能下超時,直到它可以運行長達6分鐘,而沒有得到添加結果的單元格使用GAS

我如何實現一個替代方案來完成計算一個接一個。例如,如果它在完成10260然後高達10259加入用20.35我可以通過以1至10259.那些細胞改變單元格的顏色,其原始顏色意味着它們的arent加入突出的單元值後過期。

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」來弄亂字符串,並且你可能不希望所有空單元格都在「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」,這將是一個真正的性能殺手,很可能會離開你很快就沒有執行時間配額了。

+0

讚賞,但是這也導致超時在我的情況下,其相當大。你能幫我添加並間歇性地放置計算的數據,而不是放在最後。 –