【问题标题】:Google script to work across multiple sheets谷歌脚本可以跨多个工作表工作
【发布时间】:2012-09-10 22:17:58
【问题描述】:

我是 Google 脚本的新手,如果这个问题已经得到解答,我深表歉意。

我有一个包含多个工作表的电子表格,其中一些工作表的某处有一个状态列。

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

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

以下代码(由 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);
}

谢谢。

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    电子表格只能有一个 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 */
    }
    

    【讨论】:

    • 谢谢 - 使用第二种方法我现在有工作代码
    【解决方案2】:

    @Srik - 谢谢。

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

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多