我有一个脚本,可通过单击复选框(具有是/否值)将特定值添加到工作表的最后一行,并通过取消选中同一复选框来删除该行。工作正常 但由于它是onEdit脚本-它会继续添加值。我试图循环所有这些工作,以检查该值是否已经存在,如果是,则什么也不做。我开发了以下内容,但它不起作用-每次编辑都不断添加值。这是代码
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getActiveSheet()
var paramrange = sheet.getRange('A55:C60')
var destn = sheet.getRange(sheet.getLastRow()+1, 1)
var destnorma = sheet.getRange(sheet.getLastRow()+1, 2)
var orpac = sheet.getRange('E23')
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
for (var i = 0; i <= numRows - 1; i++) {
var row = values[i];
if (row[0] == 'ORP Ac') {
} else{
if(orpac.getValue() == 'yes') {
var orpacn = 'ORP Ac';
var orpacnorm = '-150';
destn.setValue(orpacn)
destnorma.setValue(orpacnorm)
} else
{
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var rowsDeleted = 0;
for (var i = 0; i <= numRows - 1; i++) {
var row = values[i];
if (row[0] == 'ORP Ac') {
sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
rowsDeleted++;
}
}}
}
}}
答案 0 :(得分:0)
您的第二个循环在第一个循环内,并且使用相同的索引。那是个问题。
这可能会更好。但是我不知道,因为我没有您的数据。
function onEdit() {
var ss=SpreadsheetApp.getActive()
var sheet=ss.getActiveSheet()
var paramrange=sheet.getRange('A55:C60')
var destn=sheet.getRange(sheet.getLastRow()+1, 1)
var destnorma=sheet.getRange(sheet.getLastRow()+1, 2)
var orpac=sheet.getRange('E23')
var orpacvalue=orpac.getValue();
var rows=sheet.getDataRange();
var numRows=rows.getNumRows();
var values=rows.getValues();
for (var i=0;i<numRows;i++) {
var row=values[i];
if (row[0]!='ORP Ac') {
if(orpacvalue=='yes') {
var orpacn = 'ORP Ac';
var orpacnorm = '-150';
destn.setValue(orpacn)
destnorma.setValue(orpacnorm)
} else
{
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var rowsDeleted = 0;
for (var j = 0; j<numRows; j++) {
var row = values[j];
if (row[0] == 'ORP Ac') {
sheet.deleteRow((parseInt(j)+1) - rowsDeleted);
rowsDeleted++;
}
}
}
}
}
}
对于一个简单的触发器来说,这似乎是很多脚本,只需不到30秒即可完成。