Google apps script 仅适用于指定单元格范围的OneEdit触发器
我已经编写了一个脚本,将一系列单元格从一个工作表复制到一个新的工作表,用于跟踪工作,虽然只使用onedit的触发器,但效果良好。我想修改脚本,使其仅在编辑指定范围的单元格时更新跟踪表。我相信这可以用onEdite来完成,但我至今还没有弄明白Google apps script 仅适用于指定单元格范围的OneEdit触发器,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我已经编写了一个脚本,将一系列单元格从一个工作表复制到一个新的工作表,用于跟踪工作,虽然只使用onedit的触发器,但效果良好。我想修改脚本,使其仅在编辑指定范围的单元格时更新跟踪表。我相信这可以用onEdite来完成,但我至今还没有弄明白 var ss = SpreadsheetApp.getActiveSpreadsheet();//source spreadsheet var ts = SpreadsheetApp.openByUrl('https://docs.googl
var ss = SpreadsheetApp.getActiveSpreadsheet();//source spreadsheet
var ts = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/MYSHEET');//target spreadsheet for tracking
var sourceSheet = ss.getSheetByName("Report Template");//source sheet
var targetSheet = ts.getSheetByName("Tracker");//target sheet
var values = sourceSheet.getRange("H7:I7").getValues();//source sheet cell range to copy to target sheet
var valuesLength = values.length;
if (!valuesLength) return;
var lastRow = targetSheet.getLastRow();
var requiredRows = lastRow + valuesLength - targetSheet.getMaxRows();
if (requiredRows > 0) targetSheet.insertRowsAfter(lastRow, requiredRows);
values[0].push(new Date()); //Add Date to the 2D array.
targetSheet.getRange(lastRow + 1, 1, valuesLength, values[0].length).setValues(values);
}```
您需要一个if语句来计算正在编辑的单元格
要访问已编辑的单元格,可以使用范围,该范围将返回已编辑的单元格
样本:
更新:
您还有其他一些小错误,例如requiredRows定义
完整的代码如下所示,您应该通过实际希望查看的单元格替换单元格A1和A2:
function onEdit(event){
var cellName = event.range.getA1Notation();
if(cellName == "A1" || cellName == "A2"){
var ss = SpreadsheetApp.getActiveSpreadsheet();//source spreadsheet
var ts = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/MYSHEET');//target spreadsheet for tracking
var sourceSheet = ss.getSheetByName("Report Template");//source sheet
var targetSheet = ts.getSheetByName("Tracker");//target sheet
var values = sourceSheet.getRange("H7:I7").getValues();//source sheet cell range to copy to target sheet
var valuesLength = values.length;
if (!valuesLength) return;
var lastRow = targetSheet.getLastRow();
var requiredRows = valuesLength;
values[0].push(new Date()); //Add Date to the 2D array.
targetSheet.getRange(lastRow + 1, 1, valuesLength, values[0].length).setValues(values);
}
}
重要:
要使用需要授权的服务,如SpreadsheetApp.openByUrl,您需要通过一个触发器替换OneEdit触发器。我已经尝试了一整天,但我似乎无法找到它,我所做的所有更改总是失败,我按照您的建议添加了我的原始代码,同时将cellName更新到我感兴趣的单元格中,但没有成功。我的错误您没有调用SpreadsheetApp.openByUrl的权限。所需权限:at onEditCode:5OAuth需要修改,因此我执行了此Appsscript.json清单{oauthScopes:[https://www.googleapis.com/auth/spreadsheets ],时区:America/Los_Angeles,依赖项:{},例外记录:STACKDRIVER}在代码运行onEdit之前,即使出现错误,也需要手动运行一次。这将触发授权流,并在您授予权限的情况下为脚本分配必要的作用域。我确实这样做了,但仍然失败,在执行时出现相同的错误。为了进一步测试,我创建了一个新的工作表,并将脚本复制到其中,运行了一次,授予了权限,然后进行了检查,执行仍然存在相同的问题。你还有其他建议吗?
function onEdit(event){
var cellName = event.range.getA1Notation();
if(cellName == "A1" || cellName == "A2"){
var ss = SpreadsheetApp.getActiveSpreadsheet();//source spreadsheet
var ts = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/MYSHEET');//target spreadsheet for tracking
var sourceSheet = ss.getSheetByName("Report Template");//source sheet
var targetSheet = ts.getSheetByName("Tracker");//target sheet
var values = sourceSheet.getRange("H7:I7").getValues();//source sheet cell range to copy to target sheet
var valuesLength = values.length;
if (!valuesLength) return;
var lastRow = targetSheet.getLastRow();
var requiredRows = valuesLength;
values[0].push(new Date()); //Add Date to the 2D array.
targetSheet.getRange(lastRow + 1, 1, valuesLength, values[0].length).setValues(values);
}
}