2017-09-17 12 views
0

Googleスプレッドシートのスクリプトで、セルの特定の値が「選択肢」と等しいかどうかを確認する関数を作成していますCube "を返し、trueを返す場合はそのセルをオーバーライドします。次のように現在の機能は次のとおりです。条件に合った場合にのみ範囲内のセル値を変更する(Googleシートアプリケーションスクリプト)

function removeCubeRewards(){ 
    var ss2=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Rewards") 
    var range = ss2.getRange("F2:F20") 
    var data = range.getValues() 

    var conditional = 0 
    for(var i=0;i<data.length; i++){ 
     if(data[i][0] == "Choice Cube"){ 
     data[i][0] = "Reward Claimed" 
     conditional++ 
     } 
    if(conditional == 6){ 
     break; 
    } 
    } 
    range.setValues(data) 
} 

それは、現在のセットアップの道は、その範囲は、データ内の値で指定された範囲内のすべてのセルを上書きしますです。条件がある場合、私はrange.setValues(データ)を実行したときにこれが

=IF(E11="X","Choice Cube", "LOCKED") 

を意味し、それらを:私の問題は、私はそうのような場合は、条件で自分のGoogleスプレッドシートセットアップの範囲内の特定の細胞を持っているということです現在表示されている値によってオーバーライドされます。

私は

if(data[i][0] == "Choice Cube") 

に一致している細胞のみが上書きされるように何ができるか疑問に思って。

+0

おそらく、あなたは 'ss2.getRangeを使用する必要があります(私は1,1 +) .setValue( 'Reward Claimed'); 'そして、setValues()を全く使わないでください。 – Cooper

答えて

0

私はあなたのスクリプトが= IF式(またはおそらくあらゆる種類の式)のセルに影響しないようにしたいと思います。これを行うには、getValuesと共にgetFormulasを使用:

var data = range.getValues(); 
    var formulas = range.getFormulas(); 
    // ... 
     if (data[i][0] == "Choice Cube" && !formulas[i][0]){ 
     // do something 
     } 

上記バージョンが考慮からの式で任意のセルを除外する。

(大文字と小文字を区別しないサブストリングの一致のために)あなたが唯一、使用を=ifを除外したい場合は、例えば、正規表現

 if (data[i][0] == "Choice Cube" && !/^=if\(/i.test(formulas[i][0])){ 
+0

ありがとう!私はあなたが数式をつかむことができるか分からなかった。現在のデータ値を現在の式と等しくなるように変更しました。それは魅力的でした! –

関連する問題