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