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 复制行时触发错误_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 复制行时触发错误

Google apps script 复制行时触发错误,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个将行从一个工作表复制到另一个工作表的功能,当我手动运行它时,该功能会起作用: function updateDataRange() { var formSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1"); var lastFormRow = formSheet.getLastRow(); var dataSheet = SpreadsheetApp

我有一个将行从一个工作表复制到另一个工作表的功能,当我手动运行它时,该功能会起作用:

function updateDataRange() {
  var formSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1");
  var lastFormRow = formSheet.getLastRow();
  var dataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DataRange");
  dataSheet.clear();
  for(var rowCounter = 1; rowCounter <= lastFormRow; rowCounter++) {
    var sourceRange = formSheet.getRange('B'+rowCounter+':H'+rowCounter);
    var insertRow = dataSheet.getLastRow() + 1;
    var targetRange = dataSheet.getRange('A'+insertRow);
    sourceRange.copyTo(targetRange);
  }
}
函数updatedTarange(){
var formSheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“表单响应1”);
var lastFormRow=formSheet.getLastRow();
var dataSheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“数据范围”);
数据表.clear();
对于(var rowCounter=1;rowCounter解释:
您正在使用
onEdit
触发器捕获工作表更改。但是
onEdit
触发器仅在用户更改单元格值时才起作用。引用:

用户更改值时,OneEdit(e)触发器将自动运行 电子表格中任何单元格的

在您的情况下,我认为您正在尝试执行此代码,而
表单响应
工作表是由表单填写数据的

有两种触发器函数用于表单提交,它们都是

一个是a,另一个是a

您的目标是从GoogleSheets端执行一些代码,因此使用第一个代码是有意义的

修改:
  • 将函数名称从
    onEdit
    更改为您选择的其他名称,例如
    myFormSubmitTrigger

  • 由于触发器是可安装的,因此您需要为
    myFormSubmitTrigger
    函数“安装”一个
    onFormSubmit
    触发器。您可以找到一些简单的操作说明


  • 如果您的问题是,当表单更改表单响应1时,您的函数为什么不工作,那么Marios已经回答了您的问题,请接受它并继续。如果您试图在用户使用简单触发器编辑表单响应1时运行您的函数,则可能会解释为什么没有获得所有行的完整性简单的触发器必须在30秒内完成。如果您继续在Form 1响应中接受更多数据,那么很快或稍后您将遇到问题,但使用此函数将要晚很多,因为它将比您的代码运行快得多:

    function updateDataRange() {
      const sss=SpreadsheetApp.openById('ssid');
      const ssh=e.source.getSheetByName('Form Responses 1');
      const sr=2;
      const svs=ssh.getRange(sr,2,sh.getLastRow()-ssr+1,7).getValues();
      const dsh=e.source.getSheetByName('DataRange');
      dsh.clear();
      dsh.getRange(1,1,svs.length,svs[0].length).setValues(svs);
    }
    
    <>但是,我建议您不要编辑表单响应表。我会考虑使用OnFrasePraseTebug来将所有数据捕获到可编辑的第二张表中,并且它将通过<代码> DSH.AppEdRead(E.Valk)自动附加附加数据。
    。因此,现在您不再需要OneEdit触发器,因为您的数据表将使用onFormSubmit触发器更新数据,您可以随时编辑数据表


    如果这两个问题都不足够,我建议您更清楚地了解自己的问题。

    谢谢您的回答!但是,我确实希望(并且确实希望)在更改单元格中的值时触发此操作(更具体地说,更改确定要复制哪些单元格的单元格)。代码应该是双向的,不是吗?@Markstar问题是谁将更改单元格的值?公式?脚本?填写的表单?用户?用户。我有一张条件表,计划是,每当一个条件发生更改时,就会触发函数。函数确实执行-它只是有问题,即如此跳过我的行,并多次复制某些行。在我的测试文件中,脚本大约需要5秒钟。此外,触发器来自另一个工作表,因此不会影响数据。我将编辑上面的帖子以使其更清晰。请使其更清晰,并请明确您正在使用的触发器和正在使用的触发器我们应该能够为您编写代码并重现相同的问题。请阅读