Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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 来自库don';行不通_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 来自库don';行不通

Google apps script 来自库don';行不通,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我创建了一个库(“CustomerReportLibrary”),其中包含一些函数,我从电子表格脚本中为这些函数创建了可安装的OneEdit触发器。 此库中的两个特定函数不起作用(其他函数起作用)。有人能解释一下原因吗 不起作用的功能: function restoreRangeSettings(e) { // retrieves data validation, conditional formatting and formatting settings from template var

我创建了一个库(“CustomerReportLibrary”),其中包含一些函数,我从电子表格脚本中为这些函数创建了可安装的OneEdit触发器。 此库中的两个特定函数不起作用(其他函数起作用)。有人能解释一下原因吗

不起作用的功能:

function restoreRangeSettings(e) {
// retrieves data validation, conditional formatting and formatting settings from template
  var spreadsheet = SpreadsheetApp.getActive();
  var range = e.range;
  var sheet = range.getSheet();
  var A1Notation = range.getA1Notation();
  var templateRange = spreadsheet.getSheetByName(sheet.getName() + ' design').getRange(A1Notation);

  templateRange.copyTo(range, SpreadsheetApp.CopyPasteType.PASTE_FORMAT, false);
  templateRange.copyTo(range, SpreadsheetApp.CopyPasteType.PASTE_CONDITIONAL_FORMATTING, false);
  templateRange.copyTo(range, SpreadsheetApp.CopyPasteType.PASTE_DATA_VALIDATION, false);
}

function logTimestamp(e) {
// logs task last edit timestamp
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = e.range.getSheet();
  var editedCell = sheet.getActiveCell();
  var editedRow = editedCell.getRow();
  var editedColumn = editedCell.getColumn();
  var emailCell = sheet.getRange(editedRow,5);
  var dateCell = sheet.getRange(editedRow,4);
  var time = new Date();
  time = Utilities.formatDate(time, "GMT+02", "dd/MM/yyyy HH:mm:ss");

  // don't do anything if edited sheets are not task sheets
  if ((sheet.getName() == 'instructions') || (sheet.getName() == 'generate report')) {return;}

  // logs timestamp when the edited range is within the task documentation table
  if ((editedColumn() > 7) && (editedRow > 4)) {
    // adds user and month to also to next row when task is added
    if ((sheet.getRange(editedRow,5,1,3).getValues() != '') && (editedColumn == 8) && (sheet.getRange(editedRow+1,4).isBlank())) {
      sheet.getRange(editedRow+1,5,1,3).setValues(sheet.getRange(editedRow,5,1,3).getValues());
    }
    dateCell.setValue(time);
  }
}
电子表格脚本中的代码:

function EditTriggers() {
  var customerSsId = SpreadsheetApp.getActive().getId();
  var customerSpreadsheet = SpreadsheetApp.openById(customerSsId);

  ScriptApp.newTrigger('CustomerReportLibrary.restoreRangeSettings')
  .forSpreadsheet(customerSpreadsheet)
  .onEdit()
  .create();

  ScriptApp.newTrigger('CustomerReportLibrary.logTimestamp')
  .forSpreadsheet(customerSpreadsheet)
  .onEdit()
  .create();

  //works fine
  ScriptApp.newTrigger('CustomerReportLibrary.showRowsAndComments')
  .forSpreadsheet(customerSpreadsheet)
  .onEdit()
  .create();

  //works fine
  ScriptApp.newTrigger('CustomerReportLibrary.optShortcuts')
  .forSpreadsheet(customerSpreadsheet)
  .onEdit()
  .create();
}

提前谢谢

我很高兴告诉大家,问题已经解决了

第一个动作(logTimestamp) 我无意中将editedColumn称为函数而不是变量

第二个动作(恢复设置) 我选择了一种不同的策略来获得所需的结果。(请参阅关于我试图实现的目标的讨论。)

第三项行动(一般) 我玩了一点游戏。例如,将范围定义为“
e.range
”不起作用,而将其定义为“
e.source.getActiveRange()
”则神奇地起作用

最终-最终代码
注意:电子表格脚本没有更改。

到底什么不起作用?函数本身或调用它们
onEdit
?如果您发现一个,请确保在从中复制代码并使用它询问其他问题之前执行。
  if ((editedColumn() > 7) && (editedRow > 4)) {
function restoreRangeSettings(e) {
// retrieves data validation, conditional formatting and formatting settings from template
  var editedSs = e.source;
  var editedRange = editedSs.getActiveRange();
  var editedSh = editedRange.getSheet().getName();

  var templateSs = SpreadsheetApp.openById('10zVclYTCEOEwskUID4vxSPxKR_tb3RaR76eG7TfxLUE');
  var templateSh = templateSs.getSheetByName(editedSh);
  var copiedSh = templateSh.copyTo(editedSs).hideSheet();
  var templateRange = editedSs.getSheetByName(copiedSh.getName()).getRange(editedRange.getA1Notation());

  templateRange.copyTo(editedRange, SpreadsheetApp.CopyPasteType.PASTE_FORMAT, false);
  templateRange.copyTo(editedRange, SpreadsheetApp.CopyPasteType.PASTE_CONDITIONAL_FORMATTING, false);
  templateRange.copyTo(editedRange, SpreadsheetApp.CopyPasteType.PASTE_DATA_VALIDATION, false);

  editedSs.deleteSheet(copiedSh);
}

function logTimestamp(e) {
// logs task last edit timestamp
  var editedRange = e.range;
  var editedSh = editedRange.getSheet();
  var editedRow = editedRange.getRow();
  var editedColumn = editedRange.getColumn();
  var emailCell = editedSh.getRange(editedRow,5);
  var dateCell = editedSh.getRange(editedRow,4);
  var time = new Date();
  time = Utilities.formatDate(time, "GMT+02", "dd/MM/yyyy HH:mm:ss");

  // don't do anything if edited sheets are not task sheets
  if ((editedSh.getName() == 'instructions') || (editedSh.getName() == 'generate report')) {return;}

  // logs timestamp when the edited range is within the task documentation table
  if ((editedColumn > 7) && (editedRow > 4)) {
    // adds user and month to also to next row when task is added
    if ((editedSh.getRange(editedRow,5,1,3).getValues() != '') && (editedColumn == 8) && (editedSh.getRange(editedRow+1,4).isBlank())) {
      editedSh.getRange(editedRow+1,5,1,3).setValues(editedSh.getRange(editedRow,5,1,3).getValues());
    }
    dateCell.setValue(time);
  }
}