Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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应用程序脚本Google sheets中的数组中提取行_Google Apps Script_Google Sheets_Google Forms - Fatal编程技术网

Google apps script 如何从Google应用程序脚本Google sheets中的数组中提取行

Google apps script 如何从Google应用程序脚本Google sheets中的数组中提取行,google-apps-script,google-sheets,google-forms,Google Apps Script,Google Sheets,Google Forms,我的电子表格由一个主表组成,该主表使用一个表单填充,再加上几个其他表单,供处理通过表单提交的回复的人员使用。脚本根据响应中描述的项目类型,将表单响应委托给这些其他工作表。 问题是,当人员A从各自的工作表中删除项目时,它不会在主工作表中删除。 我的想法是,当您在Person a的工作表的“Q”行中的相应单元格中键入设置的密码时,它会按时间戳将项目与原始表单提交匹配,并删除Person a工作表中项目的版本以及主工作表。但是,我不知道如何设置范围以使其指向数组中的行。我尝试的所有操作都已在调试器中返

我的电子表格由一个主表组成,该主表使用一个表单填充,再加上几个其他表单,供处理通过表单提交的回复的人员使用。脚本根据响应中描述的项目类型,将表单响应委托给这些其他工作表。 问题是,当人员A从各自的工作表中删除项目时,它不会在主工作表中删除。 我的想法是,当您在Person a的工作表的“Q”行中的相应单元格中键入设置的密码时,它会按时间戳将项目与原始表单提交匹配,并删除Person a工作表中项目的版本以及主工作表。但是,我不知道如何设置范围以使其指向数组中的行。我尝试的所有操作都已在调试器中返回“undefined”,并且不会删除任何内容。我认为问题在于我不知道如何从我创建的数组中获取行。请参见下面的我的代码:

   function onEdit() {//copies edited items from individual selector sheets back onto main spreadsheet

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var actSheet = ss.getActiveSheet();
    var responseSheet = ss.getSheetByName("Item Request");
    var actCell = actSheet.getActiveCell();
    var actRow = actCell.getRow();
    var actVal = actCell.getValue();
    var actLoc = actCell.getA1Notation();
    var last = actSheet.getLastRow();
    var respLast = responseSheet.getLastRow();
    var dataA = responseSheet.getRange(1, 1, respLast, 1).getValues(); //compiles an array of data found in column A through last row in response sheet
    var tstamp1 = actSheet.getRange(actCell.getRow(), 1);
    var tsVal1 = tstamp1.getValue();
    var colEdit = actCell.getColumn();

    //===========THIS IS WHERE I'M STUCK=======================
 if ((actVal == "p@ssword") && (colEdit == 17)) {
      for (i = 1; i < dataA.length; i++) {
       if (dataA[i][0].toString == tsVal1.toString()) { 
         responseSheet.deleteRow(i + 1);
         actSheet.deleteRow(actRow);
         break;
       }
      }
    }

       else if (colEdit == 15) { //checks the array to see if the edit was made to the "O" column

            for (i = 1; i < dataA.length; i++) {//checking for timestamp match and copies entry 
                if (dataA[i][0].toString() == tsVal1.toString()) {
                    var toEdit = responseSheet.getRange(i + 1, 16);
                    toEdit.setValue(actVal);
                }
            }
       } 

     else if (colEdit == 16) { // checks the array to see if the edit was made in the "P" column

         for (i = 1; i < dataA.length; i++) {//checking for timestamp match and copies entry
             if (dataA[i][0].toString() == tsVal1.toString()) {
                var toEdit = responseSheet.getRange(i + 1, 17);
                toEdit.setValue(actVal);
             }
         }
     }  

    else {return;}
}//end onEdit
function onEdit(){//将编辑的项目从各个选择器工作表复制回主电子表格
var ss=SpreadsheetApp.getActiveSpreadsheet();
var actSheet=ss.getActiveSheet();
var responseSheet=ss.getSheetByName(“项目请求”);
var actCell=actSheet.getActiveCell();
var actRow=actCell.getRow();
var actVal=actCell.getValue();
var actLoc=actCell.getA1Notation();
var last=actSheet.getLastRow();
var respLast=responseSheet.getLastRow();
var dataA=responseSheet.getRange(1,1,respLast,1).getValues();//编译响应表中A列到最后一行的数据数组
var tstamp1=actSheet.getRange(actCell.getRow(),1);
var tsVal1=tstamp1.getValue();
var colEdit=actCell.getColumn();
//============这就是我被困的地方=======================
如果((actVal==)p@ssword“&&(colEdit==17)){
对于(i=1;i
我不相信这些是正确的命令
delRow.deleteRow();actCell.deleteRow()看一看

好的,我为你们重写了这个函数,但我仍然在想有几行

function onEdit(e) 
{
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var actSheet = ss.getActiveSheet();
    var responseSheet = ss.getSheetByName("Item Request");
    var actCell = actSheet.getActiveCell();
    var actRow = actCell.getRow();
    var actVal = actCell.getValue();
    var colEdit = actCell.getColumn();
    var respLast = responseSheet.getLastRow();
    var dataA = responseSheet.getRange(1, 1, respLast, 1).getValues(); 
    var tstamp1 = actSheet.getRange(actRow, 1);
    var tsVal1 = tstamp1.getValue();

    for(var i=0;i<dataA.length;i++)
    {
      if(new Date(dataA[i][0]).valueOf()==new Date(tsVal1).valueOf()) 
      { 
        if (actVal=="p@ssword" && colEdit==17) 
        {
          responseSheet.deleteRow(i + 1);
          actSheet.deleteRow(actRow);     
        }
        else if(colEdit==15) 
        { 
          var toEdit = responseSheet.getRange(i + 1, 16);//?
          toEdit.setValue(actVal);//?
        } 
        else if (colEdit == 16) 
        {
          var toEdit = responseSheet.getRange(i + 1, 17);//?
          toEdit.setValue(actVal);//?
        }  
      }
    }  
}
函数onEdit(e)
{
var ss=SpreadsheetApp.getActiveSpreadsheet();
var actSheet=ss.getActiveSheet();
var responseSheet=ss.getSheetByName(“项目请求”);
var actCell=actSheet.getActiveCell();
var actRow=actCell.getRow();
var actVal=actCell.getValue();
var colEdit=actCell.getColumn();
var respLast=responseSheet.getLastRow();
var dataA=responseSheet.getRange(1,1,respLast,1).getValues();
var tstamp1=actSheet.getRange(actRow,1);
var tsVal1=tstamp1.getValue();

for(var i=0;iHello,我相信我已经修复了它。但是,我现在的问题是从for循环中收集的数组中获取行。对此有什么想法吗?也许您已经修复了并且没有更改您的问题。但是在这两行中,toEdit没有定义。
//var-toEdit=responseSheet.getRange();我不知道你的意思是什么?我注释掉的部分是我不知道如何正确写回数组中的行的那一行。对不起,有时我很难更改上下文。但我查看了该区域,并在你的问题区域将其更改为我认为有意义的部分。现在我想知道其余的部分ts因为那个特定的一个只需要是一个行号。它看起来数据的范围是第1行第1列responseSheet.getLastRow(),所以我认为它应该是I+1。是的!这很有意义。我将它复制到脚本中,但是,出于某种原因,它仍然没有从我的两个工作表中删除?