将范围复制到使用模板创建的另一个电子表格

时间:2020-09-07 18:59:34

标签: google-apps-script google-sheets

我正在尝试创建一个脚本,当用户单击警报消息中的“是”时,该脚本会将一系列数据从一张纸复制到另外两张单独的纸上。这两个之一将在使用模板创建的新电子表格上。我要复制的数据来自称为“数据”的工作表。目标工作表命名为“选定”,在新的电子表格中命名为“ csv”。新的电子表格将存储在其他文件夹中。发现此[脚本] [1]对我入门非常有帮助。

onEdit脚本适用于“数据”表,并且当用户单击警报消息中的复选框和“是”按钮时,会将所选行转移到“选定”表。

  function onEdit(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if(s.getName() == "data" && r.getColumn() == 16 && r.getValue() == "Yes") {
      var ui = SpreadsheetApp.getUi();
      var response = ui.alert('Are you sure you want to continue?', ui.ButtonSet.YES_NO);
      // Process the user's response.
      if (response == ui.Button.YES) {
          var row = r.getRow();
          var numColumns = s.getLastColumn();
          var targetSheet = ss.getSheetByName("selected");
          var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
          s.getRange(row, 1, 1, numColumns).moveTo(target);
          s.deleteRow(row);
      }
      Logger.log('The user clicked "Yes."');
        } 
        else if (response == ui.Button.NO) {
         clearAnswer();
      Logger.log('The user clicked "No" or the close button in the dialog\'s title bar.');
      } 
}

我遇到的第一个问题是,即使用户在脚本编辑器中触发了该功能,在用户单击警报消息中的“否”时,条件else if也不会触发该功能“ clearAnswer”。

function clearAnswer() {
  var app = SpreadsheetApp;
  var clearSheet = app.getActiveSpreadsheet().getActiveSheet();
  clearSheet.getRange("P2:P").clearContent();
}

第二个问题是,我不知道从何处开始,该脚本会将所选行从“数据”表复制到新电子表格上的“ csv”表上,该电子表格将使用模板创建。到目前为止,我已经找到了该脚本。

// Pull spreadsheet template
  var ss = SpreadsheetApp.openById('TEMPLATEFILEID');
  var newSS = ss.copy("Copy of " + ss.getName());
// Move to original folder
  var targetFolder = DriveApp.getFileById('FOLDERFORNEWFILE');
  var newSSFile = DriveApp.getFileById(newSS.getId());
  originalFolder.addFile(newSSFile);
  DriveApp.getRootFolder().removeFile(newSSFile);
}*/

如果您能为我提供任何帮助,我将不胜感激,或者希望您为我指明正确的方向,以便我更快地找到答案。

1 个答案:

答案 0 :(得分:0)

else if嵌套在弹出事件之外。尝试这样:

function onEdit(event) {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var s = event.source.getActiveSheet();
      var r = event.source.getActiveRange();
      if(s.getName() == "data" && r.getColumn() == 16 && r.getValue() == "Yes") {
          var ui = SpreadsheetApp.getUi();
          var response = ui.alert('Are you sure you want to continue?', ui.ButtonSet.YES_NO);
          // Process the user's response.
          if (response == ui.Button.YES) {
              var row = r.getRow();
              var numColumns = s.getLastColumn();
              var targetSheet = ss.getSheetByName("selected");
              var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
              s.getRange(row, 1, 1, numColumns).moveTo(target);
              s.deleteRow(row);
Logger.log('The user clicked "Yes."');
          } else if (response == ui.Button.NO) {
             clearAnswer();
          Logger.log('The user clicked "No" or the close button in the dialog\'s title bar.');
            } 
       } 
    }
}