【问题标题】:combining two onEdit Functions [duplicate]结合两个onEdit函数[重复]
【发布时间】:2017-12-27 12:26:27
【问题描述】:

以下 2 个代码执行以下操作:

第一个代码:创建一个名为 (changeLog) 的更改日志表,以跟踪我的团队在名为 (Sheet1) 的表中的 Google 表格的每个单元格中所做的更改。

第二个代码:防止单元格被更新。当用户编辑工作表上的一个单元格(名为 changeLog)时,它会根据辅助工作表上的同一单元格进行检查。如果辅助表上的值为空,则新值存储在两个表上。如果辅助表上的值不为空,则将其复制到主表上的单元格,有效地撤消更改(以保护数据已由 changeLog 表中的第一个代码输入)

问题:这两个代码都是 onEdit 函数,我怎样才能让它们一起工作?

(P.s项目触发器已经设置为onEdit,每个功能都是独立工作的)

第一个代码:

function onEdit() {
  // This script records changes to the spreadsheet on a "Changelog" sheet.
  // The changelog includes these columns:
  // "Timestamp", "Sheet name", "Cell address", "Column label", "Row label", "Value entered"

  var sheetsToWatch = ['Sheet1', 'add more'];
  // name of the sheet where the changelog is stored
  var changelogSheetName = "Changelog";

  var timestamp = new Date();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var cell = sheet.getActiveCell();
  var sheetName = sheet.getName();

  // if it is the changelog sheet that is being edited, do not record the change
  if (sheetName == changelogSheetName) return;

  // if the sheet name does not appear in sheetsToWatch, do not record the change
  var matchFound = false;
  for (var i = 0; i < sheetsToWatch.length; i++) {
   if (sheetName.match(sheetsToWatch[i])) matchFound = true;
  }
  if (!matchFound) return;

  var columnLabel = sheet.getRange(/* row 3 */ 3, cell.getColumn()).getValue();
  var rowLabel = sheet.getRange(cell.getRow(), /* column B */ 2).getValue();

  var changelogSheet = ss.getSheetByName(changelogSheetName);
  if (!changelogSheet) {
    // no changelog sheet found, create it as the last sheet in the spreadsheet
    changelogSheet = ss.insertSheet(changelogSheetName, ss.getNumSheets());
    // Utilities.sleep(2000); // give time for the new sheet to render before going back
    // ss.setActiveSheet(sheet);
    changelogSheet.appendRow(["Email","Timestamp", "Sheet name", "Cell address", "Column label", "Row label", "Value entered"]);
    changelogSheet.setFrozenRows(1);
  }
  changelogSheet.appendRow([Session.getActiveUser().getEmail(), timestamp, sheetName, cell.getA1Notation(), columnLabel, rowLabel, cell.getValue()]);
}

第二个代码:

function onEdit() {


  var masterSheetName = "Changelog" // sheet where the cells are protected from updates
  var helperSheetName = "Helper" // sheet where the values are copied for later checking
  var firstDataRow = 1; // only take into account edits on or below this row
  var firstDataColumn = 1; // only take into account edits on or to the right of this column

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var masterSheet = ss.getActiveSheet();
  if (masterSheet.getName() != masterSheetName) return;

  var masterCell = masterSheet.getActiveCell();
  if (masterCell.getRow() < firstDataRow || masterCell.getColumn() < firstDataColumn) return;

  var helperSheet = ss.getSheetByName(helperSheetName);
  var helperCell = helperSheet.getRange(masterCell.getA1Notation());
  var newValue = masterCell.getValue();
  var oldValue = helperCell.getValue();

  if (oldValue == "") {
    helperCell.setValue(newValue);
  } else {
    masterCell.setValue(oldValue);
  }
}

【问题讨论】:

    标签: google-apps-script google-sheets changelog


    【解决方案1】:

    重命名您的 2 个函数,并在编辑中创建 1 个:

    function onEdit()
    {
      onEdit1(); // run 1-st
      onEdit2(); // run 2-nd
    }
    

    【讨论】:

    • 当我将函数放在方括号 () 中时,出现语法错误并且它们都不起作用?
    • @BochoTodorov 不要忘记传递他们需要的任何参数
    猜你喜欢
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    相关资源
    最近更新 更多