Google apps script Google脚本可以跨多个工作表工作

Google apps script Google脚本可以跨多个工作表工作,google-apps-script,Google Apps Script,我是谷歌脚本的新手,如果这个问题已经得到了回答,我深表歉意 我有一个包含多个工作表的电子表格,其中一些工作表的某个位置有一个状态栏 使用我已经发现的代码,我可以根据状态列单元格中的值设置整行颜色 我的问题是,我只能让代码在一张纸上工作 以下代码(由ScampMichael编写)的工作原理与我希望基于Status列中的值更新整行的工作原理完全相同,但我无法让它在同一工作簿中的多个工作表(具有不同的名称)上工作 我已经尝试将代码作为单独的脚本,使用编辑过的工作表名称和列编号,这样每个都引用一个单独的

我是谷歌脚本的新手,如果这个问题已经得到了回答,我深表歉意

我有一个包含多个工作表的电子表格,其中一些工作表的某个位置有一个状态栏

使用我已经发现的代码,我可以根据状态列单元格中的值设置整行颜色

我的问题是,我只能让代码在一张纸上工作

以下代码(由ScampMichael编写)的工作原理与我希望基于Status列中的值更新整行的工作原理完全相同,但我无法让它在同一工作簿中的多个工作表(具有不同的名称)上工作

我已经尝试将代码作为单独的脚本,使用编辑过的工作表名称和列编号,这样每个都引用一个单独的工作表,但仍然只更新了一个工作表

请有人告诉我如何编辑此代码或如何复制它,以便在多个工作表中工作

function onEdit(e) {

  var statusCol = 2; // replace with the column index of Status column A=1,B=2,etc

  var sheetName = "Services"; // replace with actual name of sheet containing Status

  var cell = e.source.getActiveCell();
  var sheet = cell.getSheet();
  if(cell.getColumnIndex() != statusCol || sheet.getName() != sheetName) return;

  var row = cell.getRowIndex();
  var status = cell.getValue();

  // change colors to meet your needs
  var color;
  switch(status ) {
    case "Down":
      color = "red";
      break;
    case "":
      color = "White";
      break;
    case "Up":
      color = "green";
      break;
  }
  sheet.getRange(row + ":" + row ).setBackgroundColor(color);
}

谢谢。

电子表格只能有一个onEdit()函数。因此,对任何工作表所做的编辑都必须在同一个函数中处理

一种方法是不硬编码statusCol的值,而是在运行时获取它。 在许多可能的方法中,我在这里给出两种

更简单的方法

var statusCols = { 'Sheet1' : 1,
                   'Sheet2' : 2,
                   'Sheet3' : 7  //etc.
                 };


function onEdit(e){
  var cell = e.source.getActiveCell();
  var sheet = cell.getSheet();

  var sheetName = sheet.getName(); 
  var statusCol = statusCols[sheetName];

  /* Whatever code you already have */
}
第二种方法更通用

function onEdit(e){   
  var cell = e.source.getActiveCell();   
  var sheet = cell.getSheet();
  var headers= sheet.getDataRange().getValues()[0]; //Assuming headers on the first row only   
  var statusCol = headers.indexOf('Status') + 1 ; // Replace Status by the actual column header 
  /* Your existing code here */
}
@谢谢你

使用第二种方法,我现在有了跨多个选项卡工作的以下代码:

function onEdit(e){   
  var cell = e.source.getActiveCell();   
  var sheet = cell.getSheet();
  var headers= sheet.getDataRange().getValues()[0]; //Assuming headers on the first row only   
  var statusCol = headers.indexOf('Status') + 1 ; // Replace Status by the actual column header 

  var row = cell.getRowIndex();
  var status = cell.getValue();

  // change colors to meet your needs
  var color;
  switch(status ) {
    case "Down":
      color = "RED";
      break;
    case "Up":
      color = "LIME";
      break;
    case "":
      color = "WHITE";
      break;
  }
  sheet.getRange(row + ":" + row ).setBackgroundColor(color);
}

谢谢-使用第二种方法,我现在有了工作代码