首页 > 解决方案 > 我正在使用取决于相对列的 If 语句 - 无法使其工作

问题描述

我正在使用谷歌表格。我在单元格 E1:AD1 中有复选框。当检查了这些复选框之一时,我希望该列的第1行中的单元格将背景颜色为绿色。

最终,我希望能够对列中的不同行做同样的事情。请在下面查看我的 onEdit 脚本。

/** @OnlyCurrentDoc */

function onEdit(e) {

//This IF statement ensures that this onEdit macro only runs when cells E1:AD1 are edited in the sheet named "Finances 2020"
if (
e.source.getSheetName() == "Finances 2020" &&
e.range.columnStart == 5 &&
e.range.columnEnd == 30 &&
e.range.rowStart >= 1 &&
e.range.rowEnd <= 1 
) { 

//This if statement checks if the checkbox was checked or unchecked:
var checkboxtest = e.range.getValue()
if (checkboxtest == true) {

  //If so, colour the cell in row 1 of that column as green:
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var Finances_2020 = spreadsheet.getSheetByName("Finances 2020");
  var Fortnightcolumn = e.range.columnStart      
  Finances_2020.getRange(1, Fortnightcolumn).setBackground('#d9ead3');

}else{

}
}
}
;

标签: google-apps-scriptgoogle-sheetsgoogle-sheets-macros

解决方案


  • 如果您想对第 1 行(第 5 列和第 30 列之间)的任何已编辑单元格应用背景更改 - 正确的语句应该是:

if (e.source.getSheetName() == "Finances 2020" && 5<=e.range.getColumn()<=30 && e.range.getRow() == 1)

  • 另外,请记住,if仅当工作表名称为 时才输入第一个循环Finances 2020。因此,要设置背景颜色,您不需要单独处理工作表,而是可以定义e.range.setBackground('#d9ead3');.

概括

function onEdit(e) {
//This IF statement ensures that this onEdit macro only runs when cells E1:AD1 are edited in the sheet named "Finances 2020"
if (e.source.getSheetName() == "Finances 2020" &&
5<=e.range.getColumn()<=30 &&
e.range.getRow() == 1) { 
  //This if statement checks if the checkbox was checked or unchecked:
  var checkboxtest = e.range.getValue();
  if (checkboxtest == true) {
    //If so, colour the cell in row 1 of that column as green:
    e.range.setBackground('#d9ead3');
    }
  }
}

如果您还想将背景更改应用到其他行,例如第 1 到 5 行 - 将 if 语句的条件从更改...&& e.range.getRow() == 1...&& 1 <= e.range.getRow() <= 5


推荐阅读