首页 > 解决方案 > 如果值等于特定文本,则调用单元格值的 onEdit 函数

问题描述

我有一个名为 copy() 的函数,它可以从一张纸上复制一个范围并粘贴到另一张纸上。该功能需要从脚本编辑器执行,但如果我更改单元格 Sheet3!A3 的值,我想自动执行它。

使用以下代码,我可以将日期/时间发送到特定单元格。我想要这样的东西,如果 Sheet3 的 A3 的值发生变化,它只会调用函数 copy() 。

function onEdit(event) {
  var range = event.range;
  //var cofCellEdited = range.getActivelumnOSheet();
  var cofCellEdited = range.getSheet().getSheetName();
  if (cofCellEdited === "Sale") {

    var timezone = "GMT+06:00"
    var timestamp_format = "M/d/yyyy HH:mm:ss"; // Timestamp Format. 
    var updateColName = "Product";
    var timeStampColName = "Time";
    var sheet = event.source.getSheetByName('Sale'); //Name of the sheet where you want to run this script.
    var actRng = event.source.getActiveRange();
    var editColumn = actRng.getColumn();
    var index = actRng.getRowIndex();
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
    var dateCol = headers[0].indexOf(timeStampColName);
    var updateCol = headers[0].indexOf(updateColName);
    updateCol = updateCol + 1;
    if (dateCol > -1 && index > 1 && editColumn == updateCol) { // only timestamp if 'Last Updated' header exists, but not in the header row itself!
      var cell = sheet.getRange(index, dateCol + 1);
      var date = Utilities.formatDate(new Date(), timezone, timestamp_format);
      cell.setValue(date);
    }
  }

我的复制功能是:

function copy() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var target = SpreadsheetApp.openById("1I9KYJUtT2Vi0yAi_b8LaBSijReL-XEoKKZUqTxeWmQQ");
  var source_sheet = ss.getSheetByName("Suposed Share");
  var target_sheet = target.getSheetByName("Payable");
  var source_range = source_sheet.getRange("A2:D3");
  var last_row = target_sheet.getLastRow();
  target_sheet.insertRowAfter(last_row);
  var target_range = target_sheet.getRange("A" + (last_row + 1) + ":D" + (last_row + 1));
  source_range.copyTo(target_range, {
    contentsOnly: true
  });


}

如果更改 Sheet3!A3 的值,如何调用此函数?

标签: google-apps-script

解决方案


您可以在代码中使用带有以下公式的可安装触发器来实现您的请求:

function onEdit(e) {
  if (e.range.getA1Notation() == 'A3' && e.source.getSheetName() == 'Sheet3') {
    copy();
  }
}

每次调用工作表的单元格时,该公式将使用事件对象调用公式。您不需要代码中的(来自您的问题)来完成这项工作。如果您需要进一步说明,请寻求帮助。copy()A3Sheet3onEdit(event)


推荐阅读