Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 谷歌工作表脚本运行时,我们在一个特定的子工作表编辑_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 谷歌工作表脚本运行时,我们在一个特定的子工作表编辑

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

我们有下面的谷歌工作表脚本,它工作正常,但我们希望在只有子工作表“测试”范围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”,并且编辑的范围,
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');
  }
}