Google 脚本 if 语句仅在最后一行具有条件格式
Google scripts if statement with conditional formatting on last row only
我正在尝试使用 Google 脚本在 Google [=57] 第二列的最后一行 中仅设置一个 单元格=] 为绿色,如果是:
1. <0
,
2.不等于#N/A
部分首选方法
我有以下 if
语句(不使用循环):
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
lastrow = sheet.getLastRow()
if (sheet.getRange(lastrow, 2, 1, 1) >0.00 && sheet.getRange(lastrow, 2, 1, 1) !='#N/A') {
sheet.getRange(lastrow, 2, 1, 1).setFontColor('green');
}
但是,这不起作用。根本就是没有给字体指定绿色。
不是首选方法
我可以使用循环,基于此answer,并一次循环遍历列中的所有行:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
lastrow = sheet.getLastRow()
var oValues = sheet.getRange(2, 2, lastrow, 1).getValues();
for (var i = 0; i < oValues.length; i++) {
if (oValues[i] >0.00) {
sheet.getRange(i, 2, 1, 1).setFontColor('green');
}
}
但是,缺点是这种方法正在格式化列中的所有行。我只需要格式化最后一行。
有没有办法避免遍历所有行,只检查最后一行是否符合上面的 1. 和 2. ?
这个答案怎么样?
修改点:
- 在您的脚本中,
sheet.getRange(lastrow, 2, 1, 1) > 0.00
和 sheet.getRange(lastrow, 2, 1, 1) !='#N/A'
表示与范围进行比较。当你想比较一个单元格的值时,可以使用sheet.getRange(lastrow, 2, 1, 1).getValue()
.
<0
不等于#N/A
的条件可以写成if (value < 0 && value) {}
.
- 最后一行第2列的单元格可以写成
sheet.getRange(sheet.getLastRow(), 2)
。
- 在您的情况下,您也可以使用
sheet.getRange(sheet.getLastRow(), 2, 1, 1)
。
上面反映的修改后的脚本如下
修改脚本:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var range = sheet.getRange(sheet.getLastRow(), 2); // Last row of 2nd column
var value = range.getValue(); // Value of last row of 2nd column
if (value < 0 && value) { // <0 and not equal to #N/A
// range.setBackground("green"); // This line give the background color of cell.
range.setFontColor("green"); // This line give the font color of cell.
}
如果我误解了你的问题,请告诉我。我要修改。
我正在尝试使用 Google 脚本在 Google [=57] 第二列的最后一行 中仅设置一个 单元格=] 为绿色,如果是:
1. <0
,
2.不等于#N/A
部分首选方法
我有以下 if
语句(不使用循环):
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
lastrow = sheet.getLastRow()
if (sheet.getRange(lastrow, 2, 1, 1) >0.00 && sheet.getRange(lastrow, 2, 1, 1) !='#N/A') {
sheet.getRange(lastrow, 2, 1, 1).setFontColor('green');
}
但是,这不起作用。根本就是没有给字体指定绿色。
不是首选方法
我可以使用循环,基于此answer,并一次循环遍历列中的所有行:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
lastrow = sheet.getLastRow()
var oValues = sheet.getRange(2, 2, lastrow, 1).getValues();
for (var i = 0; i < oValues.length; i++) {
if (oValues[i] >0.00) {
sheet.getRange(i, 2, 1, 1).setFontColor('green');
}
}
但是,缺点是这种方法正在格式化列中的所有行。我只需要格式化最后一行。
有没有办法避免遍历所有行,只检查最后一行是否符合上面的 1. 和 2. ?
这个答案怎么样?
修改点:
- 在您的脚本中,
sheet.getRange(lastrow, 2, 1, 1) > 0.00
和sheet.getRange(lastrow, 2, 1, 1) !='#N/A'
表示与范围进行比较。当你想比较一个单元格的值时,可以使用sheet.getRange(lastrow, 2, 1, 1).getValue()
. <0
不等于#N/A
的条件可以写成if (value < 0 && value) {}
.- 最后一行第2列的单元格可以写成
sheet.getRange(sheet.getLastRow(), 2)
。- 在您的情况下,您也可以使用
sheet.getRange(sheet.getLastRow(), 2, 1, 1)
。
- 在您的情况下,您也可以使用
上面反映的修改后的脚本如下
修改脚本:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var range = sheet.getRange(sheet.getLastRow(), 2); // Last row of 2nd column
var value = range.getValue(); // Value of last row of 2nd column
if (value < 0 && value) { // <0 and not equal to #N/A
// range.setBackground("green"); // This line give the background color of cell.
range.setFontColor("green"); // This line give the font color of cell.
}
如果我误解了你的问题,请告诉我。我要修改。