我有工作代码,如果列对应于其中一个条件,则从工作表中删除行。它基于数组,因为它的工作速度比标准的google工作表deleteRow
功能快得多。我称之为:
deleteRowsBV('SIZ',4,'0','')
,其中
deleteRowsBV(listName,ColNum,FirstSearch,SecondSearch)
我想要的是一个带有或多和少等号的呼叫功能,如下所示:
deleteRowsBV('SIZ',4,<='0',=='')
但是在我的主要功能的情况下,当我指定变量而不是符号和值时,它不起作用。 这是主要功能:
function deleteRowsBV(listName,ColNum,FirstSearch,SecondSearch) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(listName);
var DataLengBefore = sheet.getLastRow();
var DataColLeng = sheet.getLastColumn();
var data = sheet.getRange(1,1,DataLengBefore,DataColLeng).getValues();
for (var i = data.length-1; i >= 0; i--) {
if (data[i][ColNum] <= FirstSearch||data[i][ColNum] == SecondSearch) {
data.splice(i, 1);
}
}
sheet.getRange(10, 1, DataLengBefore,DataColLeng).clearContent();
sheet.getRange(10, 1,data.length,5).setValues(data);
}
答案 0 :(得分:0)
基于此related post,电子表格行和列从1开始编号,对于SpreadsheetApp中的所有方法,而javascript数组从0开始编号。在使用两者时,需要在这些数字基础之间进行调整。删除行时,电子表格dataRange的大小会变小;你确实考虑到了这一点,但由于你已经循环到最大尺寸,因此这个要求使代码变得复杂。您可以通过从最大值开始循环来简化操作。
您可以参考此thread。但是,这仅查看现在单个单元格编辑的值,而不是整个工作表中的值。
function onEdit(e) { //Logger.log(JSON.stringify(e)); //{"source":{},"range":{"rowStart":1,"rowEnd":1,"columnEnd":1,"columnStart":1},"value":"1","user":{"email":"","nickname":""},"authMode":{}} try { var ss = e.source; // Just pull the spreadsheet object from the one already being passed to onEdit var s = ss.getActiveSheet(); // Conditions are by sheet and a single cell in a certain column if (s.getName() == 'Sheet1' && // change to your own e.range.columnStart == 3 && e.range.columnEnd == 3 && // only look at edits happening in col C which is 3 e.range.rowStart == e.range.rowEnd ) { // only look at single row edits which will equal a single cell checkCellValue(e); } } catch (error) { Logger.log(error); } }; function checkCellValue(e) { if ( !e.value || e.value == 0) { // Delete if value is zero or empty e.source.getActiveSheet().deleteRow(e.range.rowStart); } }