2017-09-17 62 views
0

我正在研究Google Sheets腳本的函數,該函數將檢查單元格中的某個值是否等於「選項立方體「,然後覆蓋該單元格,如果它返回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) 
} 

它目前建立的方式是,範圍將覆蓋在指定範圍內的所有單元格,在數據中的值。我的問題是,我在我的谷歌電子表格建立的範圍內某些細胞使用if條件,像這樣:

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

當我執行range.setValues(數據),這將意味着這些如果條件被當前顯示的任何值覆蓋。

我想知道什麼我可以這樣做,只有在

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

匹配的細胞覆蓋。

+0

也許你應該使用'ss2.getRange(1 + 1,1) .setValue('Reward Claimed');'然後根本不使用setValues()。 – Cooper

回答

0

我知道您希望您的腳本不會影響具有= IF公式的單元格(或者可能是任何類型的公式)。要做到這一點,可使用帶有getFormulas沿getValues

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

謝謝!我不知道你可以抓住公式。我修改了我的代碼,將當前的數據值設置爲等於當前的公式,它的功能就像一個魅力! –

相關問題