Google apps script 谷歌工作表脚本运行时,我们在一个特定的子工作表编辑
我们有下面的谷歌工作表脚本,它工作正常,但我们希望在只有子工作表“测试”范围A4编辑或更改时自动运行它 我们对子表“测试”范围A进行任何更改或编辑,它将运行Google apps script 谷歌工作表脚本运行时,我们在一个特定的子工作表编辑,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我们有下面的谷歌工作表脚本,它工作正常,但我们希望在只有子工作表“测试”范围A4编辑或更改时自动运行它 我们对子表“测试”范围A进行任何更改或编辑,它将运行 function CopyPasteVal() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('test'), true); spreadsheet.getRange('B
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”,并且编辑的范围,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();
}
}
参考资料:
说明:
请注意以下两点:
- 除非您明确希望在脚本运行时查看工作表中的更改,否则不需要激活范围或工作表
- 你需要一个触发器,它将充分利用这个特性。然后,您可以确保仅当活动工作表(您编辑的工作表)是
工作表且编辑的单元格是测试
单元格时,才执行代码块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');
}
}