谷歌应用程序脚本,用于根据另一个单元格的值对一个单元格进行条件颜色格式化

时间:2012-08-08 01:34:37

标签: javascript google-apps-script google-sheets

我正在尝试整理一个谷歌应用程序脚本,该脚本根据另一个单元格的值更改单元格的字体颜色。如果单元格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&gt; D2颜色为红色且如果B2 < C2颜色为蓝色,否则为绿色。

1 个答案:

答案 0 :(得分:3)

我看到的第一件事是第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);
}