如何从 Google 应用程序脚本 Google 工作表中的数组中提取行

How do I pull a Row from an Array in Google apps script Google sheets

我的传播sheet 由使用表单填充的主要 sheet 和其他几个 sheet 组成,供处理通过表单提交的回复的人员使用。脚本根据响应中描述的项目类型将表单响应委托给这些其他 sheet。 问题是,当 A 从他们各自的 sheet 中删除一个项目时,它不会在主 sheet 中删除。 我的想法是,当您在 A 的 sheet 行 'Q' 中的相应单元格中输入设置密码时,它会按时间戳将项目与原始表单提交相匹配,并删除项目的两个版本A 的 sheet 以及主要的 sheet。但是,我无法弄清楚将范围设置为什么以使其指向数组中的行。我尝试过的所有内容都已在调试器中发回 "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

我不认为这些是正确的命令delRow.deleteRow();actCell.deleteRow();看看documentation;

好的,我为您稍微重写了该函数,但我仍然想知道有几行。

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);//?
        }  
      }
    }  
}

你能解释一下带问号注释的行的功能吗?