Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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,我正在尝试创建一个脚本,当用户在警报消息中单击“是”时,该脚本会将一系列数据从一个工作表复制到另两个单独的工作表。其中一个将出现在使用模板创建的新电子表格上。我要复制的数据来自一个名为“数据”的工作表。目标工作表命名为“选定”,在新的电子表格中命名为“csv”。新的电子表格将存储在不同的文件夹中。发现此[脚本][1]对我的入门非常有帮助 onEdit脚本对于“数据”工作表工作正常,当用户单击复选框和警报消息中的“是”按钮时,会将所选行传输到“所选”工作表 function onEdit(ev

我正在尝试创建一个脚本,当用户在警报消息中单击“是”时,该脚本会将一系列数据从一个工作表复制到另两个单独的工作表。其中一个将出现在使用模板创建的新电子表格上。我要复制的数据来自一个名为“数据”的工作表。目标工作表命名为“选定”,在新的电子表格中命名为“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);
}*/

如果您能给我提供任何帮助,我将不胜感激,或者我希望您能为我指出正确的方向,以便我能更快地解决问题。

如果嵌套在弹出事件之外,则您可以
。试着这样做:

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。试着这样做:

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.');
            } 
       } 
    }
}

所以,我想澄清一下,当你在右边的单元格中标记“是”时,你基本上想把一个范围从一张纸复制到另一张纸吗?当您标记“否”时,是否要清除原始工作表中的所有单元格?您要使用的模板表是什么?您能否提供一份没有敏感数据的样本表,以便您的意图和行为不稳定的方式更加清晰?谢谢D你的问题只问一个问题,一个问题。用不同的问题问不同的问题。1.我遇到的第一个问题是,如果条件else未触发函数“clearAnswer”,请尝试查看>执行>日志SSO,只是为了澄清一下,当您在单元格上标记为“是”时,您是否基本上希望将一个范围从一张工作表复制到另一张工作表?当您标记“否”时,是否要清除原始工作表中的所有单元格?您要使用的模板表是什么?您能否提供一份没有敏感数据的样本表,以便您的意图和行为不稳定的方式更加清晰?谢谢D你的问题只问一个问题,一个问题。用不同的问题问不同的问题。1.我遇到的第一个问题是,如果条件else没有触发函数“clearAnswer”,请尝试查看>执行>日志