2017-09-16 3 views
0

渡された値を関数(たとえば20.35)にすべての選択したセルに追加する必要があります。私は巨大なリストを持っており、以下の関数は、最大6分まで実行することができます。セルに追加された結果は得られません。GASを使用してセルの選択範囲にセルを追加

計算を完了するとすぐにセルを書き込む回避策を達成するにはどうしたらいいですか? 。たとえば、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"で文字列を乱さないようにしたいと思うし、おそらくすべての空のセルが "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

これは評価しましたが、これは私のケースでは非常に大きなタイムアウトにもつながります。最後に配置する代わりに、計算されたデータを断続的に追加して配置する手助けをしてください。 –

関連する問題