我的电子表格由一个主表组成,该主表使用一个表单填充,再加上几个其他表单,供处理通过表单提交的回复的人员使用。脚本根据响应中描述的项目类型,将表单响应委托给这些其他工作表。问题是,当人员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
我不相信这些是正确的命令。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);//?
}
}
}
}
你能解释一下带有问题标记注释的行的功能吗?
把所有信息写到电子表格中。 删除唯一的标记信息以防止重复运行。 然后使用form mule addon从电子表格发送电子邮件。 到目前为止,我已经处理了第1步(简单),而第2步和第3步(我不是一个编码器,我可以读、解串和黑。从头开始写是完全不同的事情)。我以前处理过4次,我认为这是最好的处理方法。 通过脚本,我将信息提取到电子表格中,通过插件,我使用电子表格中的信息发送电子邮件。 这是我到目前为止
我使用SpreadSheet中的脚本在活动行下面添加行,并从活动行复制内容。在PC上,我可以通过图像/绘图触发脚本,它工作得很好。但是我不知道如何让它在iOS应用程序中工作,在应用程序中,图像触发不起作用,从一个应用程序复制内容到另一个应用程序是噩梦。我尝试了onEdit和isChecked为每一行,但它会给我新的行在每个编辑。你能帮忙吗? https://docs.google.com/spre
我把我的应用放到Google Play,现在我做一些事情,比如添加新功能,新UI等,然后重新上传应用到Google Play。 所以我想,当用户启动应用程序时,如果有新的更新,显示一个对话框提醒用户,允许他们更新最新版本。 谷歌似乎没有提供任何API来获得应用版本,那么有什么解决方案可以做吗?
我试图找出最健壮的方法,从行提要,而不是单元格提要来确定谷歌表格中一列的顺序位置。 例如,我有以下电子表格: 在我的代码中,我能够通过谷歌的工作表API成功地从工作表中获取基于行的提要。我为提要中的每一行返回的对象包括各种属性,其中大多数是标题行中的值。例如,一个单行对象看起来像: 我想从基于行的提要中找到任何给定列的顺序位置,但是如何做到这一点似乎并不明显。似乎对象的属性是根据它们在标题行中的位
问题内容: 我有一个变量,如下所示: 该变量中包含许多城镇数据。如何有效地从数据中提取第三个元素?我,下面会是什么? 如果我想将两个值都存储在数组中怎么办?那是 我是Java的新手。我希望有一种不使用for循环的方法。 问题答案: 在较新的浏览器上,您可以使用,否则可以避免使用循环。 但是for循环更兼容。
我正在为谷歌表发送数据到服务器的脚本。目标Google Sheets文档有几个工作表。每个工作表必须有自己的菜单。所以我已经搜索了当活动表更改时触发的任何触发器,但我不能。 如何获取工作表切换事件? 谢谢你:) 使现代化我有这个功能: 但我想用函数替换onOpen,该函数将由激活工作表时触发的某个事件调用。 更新2. 我根据@Cooper的回答应用更改。现在,onOpen仍然可以正常工作,但是on