2014-01-28 62 views
0

我目前正試圖凝聚我的一些代碼在谷歌腳本從很多字符到很多。凝聚javascript代碼通過嵌套其他如果語句裏面,而

目前,我的代碼看起來是這樣的 - 我需要寫這32倍的每一行,變量cell2A2將這個代碼的每塊上增加一個(最多cell32A32):

if (cell2 == condition1) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color1); 
    else if(cell2 == condition1) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color1); 
    else if(cell2 == condition2) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color2); 
    else if(cell2 == condition3) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color3); 
    else if(cell2 == condition4) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color4); 
    else if(cell2 == condition5) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color5); 
    else if(cell2 == condition6) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color6); 
    else if(cell2 == condition7) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color7); 
    else if(cell2 == condition8) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color8); 
    else if(cell2 == condition9) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color9); 
    else if(cell2 == condition10) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color10); 
    else if(cell2 == condition11) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color11); 
    else if(cell2 == condition12) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color12); 
    else if(cell2 == condition13) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color13); 
    else if(cell2 == condition14) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color14); 
    else 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor('white'); 

然而,凝結這一點,我想設置以下功能:

function updateColor(range) { 
    var cell = range; 
    var condition = "condition"; 
    var number = cell.replace("$B", ""); 
    var i = 0; 

    if (cell == condition+i) { 
    spreadsheet.getRange(spreadsheet.getRange("A"+number).offset(0, 0, 1,3).getA1Notation()).setBackgroundColor(color1); 
    } 
    while (i<=14) { 
    else if(cell == condition+i) { 
     spreadsheet.getRange(spreadsheet.getRange("A"+number).offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(color+i); 
    } 
    i++; 
    } 
    else { 
    spreadsheet.getRange(spreadsheet.getRange("A"+number).offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor('white'); 
    } 

我試圖完成設置,通過使用while循環文本的大塊,並INCREM在循環的每次迭代期間將else if中的變量加1。我遇到的問題是代碼無法運行 - 它掛在else if行,我認爲這是因爲我無法在while循環內啓動else ifcolor也已在此函數之前定義,1到14.

如何編寫此循環以便從底部生成頂部,執行時的功能更小,還是無法壓縮此操作我嘗試着?

謝謝你的幫助。

+0

如果前面沒有if語句,則不能有'else if'語句。 – Barmar

回答

0

如果正確理解你想要的是在你的代碼中減少if語句的數量,如果是這樣的話我會做的是創建一個帶有「條件」或條件標識符和顏色的哈希表,如下所示:

var hasTable = { 
    "condition1": "#fff000", 
    "condition2": "#55BC00", 
    "condition3": "#ECECEC", 
    "condition4": "green" 
    /*... so on, so forth*/ 
}; 
if (hasTable[cell2]) 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor(hasTable[cell2]); 
else 
    spreadsheet.getRange(spreadsheet.getRange('A2').offset(0, 0, 1, 3).getA1Notation()).setBackgroundColor('white'); 
+0

我需要在每個else if中增加'color#'和'condition#'1,但'A2'是靜態的 - 它只會根據我輸入的函數而改變。我將嘗試擺弄你爲我列出的代碼,並試圖讓它起作用 - 我會以任何方式報告! 編輯:我的意思是說'if {}'必須在所有列出的顏色之間循環,所以如果'condition1'爲真,它將等於'color1'。如果'condition5'爲true,則它將等於'color5'。總共有14個,我必須檢查每一個。 – John

+0

好的,我試圖弄亂代碼,但我無法讓它工作,我需要它。不過謝謝你! – John