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