2012-08-08 56 views
0

我試圖把谷歌應用程序腳本基於另一個單元格的值更改單元格的字體顏色。如果單元格B2> D2,請將B2的字體顏色更改爲紅色。問題是我沒有使用JavaScript的經驗...所以我複製粘貼和編輯的小腳本不起作用。谷歌應用程序的腳本,基於另一個單元格的值的一個單元格的條件顏色格式化

function formatting() { 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); 
    var columnO = sheet.getRange(2, 2, sheet.getLastRow()-1, 1); 
    var oValues = columnO.getValues(); 
    var column1 = sheet.getRange(2, 4, sheet.getLastRow()-1, 1); 
    var oValues1 = columnO.getValues(); 

    for (var i = 0; i < oValues.length; i++) { 
    if (oValues[i][0] > oValues1[i][0]) { 
     sheet.getRange(i, 1, 1, 1).setFontColors('red'); 
    } 
    } 
} 

我想這個腳本擴展到能夠做到:如果B2> D2紅色,如果B2 < C2顏色爲藍色,否則綠色。

回答

2

我看到的第一件事是第6行的錯誤/錯字:column0.getValues()應該是column1.getValues()

另一個錯誤是在for循環,你在那裏getRange(i, 1, 1, 1)。在你寫的問題上,你想改變B2的單元格顏色,並且這條語句正在改變列A。另外,行索引應該從2開始,而不是0.

在這樣的腳本上考慮的另一個重要的事情是使用批處理函數,因爲它會大大加快它的速度。

function formatting() { 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); 
    var values = sheet.getRange(2, 2, sheet.getLastRow()-1, 3).getValues(); //B, C and D 
    var colors = []; 

    for (var i = 0; i < values.length; i++) 
    colors.push([values[i][0] > values[i][2] ? 'red' : 
       values[i][0] < values[i][2] ? 'blue' : 'green']); 
    sheet.getRange(2, 2, colors.length, 1).setFontColors(colors); 
} 
+0

謝謝你,它的工作原理。 – koogee 2012-08-08 08:53:12

+0

當我更新列B,C和D時,是否有任何方法可以自動運行? – koogee 2012-08-08 09:26:25

+0

是的。請看看這裏:https://developers.google.com/apps-script/understanding_triggers#Simple – 2012-08-08 11:28:26

相關問題