当我们在特定的子工作表上进行编辑时,会运行Google工作表脚本



我们有下面的Google Sheet脚本,它运行良好,但我们希望在只有子工作表时自动运行它"测试";范围A4编辑或更改,

我们对子表"测试"范围A进行任何更改或编辑,它将运行

function CopyPasteVal() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('test'), true);
spreadsheet.getRange('B:B').activate();
spreadsheet.getRange('C:C').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getActiveRangeList().setNumberFormat('0');
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('test'), true);
spreadsheet.getRange('A4').activate();
}

但如果我们在其他子表中进行任何更改,上述代码将不会运行。

说明:

请注意以下两件事:

  • 您不需要激活范围或工作表,除非您明确希望在脚本运行时查看工作表中的更改。

  • 您需要一个onEdit(e(触发器,它将充分利用事件对象。然后,您可以确保只有当活动工作表(您编辑的工作表(是test工作表并且编辑的单元格是A4单元格时,才执行代码块。

解决方案:

function onEdit(e) {
const range = e.range;
const spreadsheet = e.source;
const as = spreadsheet.getActiveSheet();
if(as.getName()=='test' && range.getA1Notation() == "A4"){
const destRng = as.getRange('B:B');
as.getRange('C:C').copyTo(destRng, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
destRng.setNumberFormat('0');
}
}

您需要将逻辑放入一个简单的触发器函数中,在本例中为onEdit(e),并检查活动表是否为"测试";和编辑的范围,e.range正是单元格A4:

function onEdit(e) {
var range = e.range;
var spreadsheet = SpreadsheetApp.getActive();
if (spreadsheet.getActiveSheet().getSheetName() == "test" && range.getA1Notation() == "A4") {
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('test'), true);
spreadsheet.getRange('B:B').activate();
spreadsheet.getRange('C:C').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getActiveRangeList().setNumberFormat('0');
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('test'), true);
spreadsheet.getRange('A4').activate();
}
}

参考文献:

简单触发器

最新更新