currentSaved数组包含一个范围,其中数据保存在我的图纸上。数组数据包含我要从工作表中删除的行。
我要比较数组行,但是脚本会继续运行而不会返回输出。
此外,我尝试从空行中替换行,而不是从currentSaved中删除行。我这样做是因为我担心删除行会改变Array的大小并导致其跳过信息。
例如,如果删除了currentlySaved [3],则currentSaved [4]成为新的currentlySaved [3]。因为循环已经通过i = 3,所以将忽略当前becurrentlySaved [4]。
这就是我现在拥有的:
var emptyRow = []; //an empty row to replace deleted data
for (i=0; i<currentlySaved.length;i++) {
for (j=0; j<data.length;i++) {
if ( currentlySaved[i] == data[j]) {
currentlySaved[i] =emptyRow;
}
}
}
谢谢大家!
编辑:添加了报告和saveDB的屏幕截图。对不起,他们被删掉了,工作表上的数据是机密的。 应该如何工作:如果删除了报告中的驱动程序,则应该删除其在saveDB上的行。
示例:
报告将显示从saveDB获取的信息
复选框终端驱动程序号名称 FALSE纽约1234约翰
用户将复选框标记为true,然后单击页面顶部的“删除”按钮。
然后脚本必须在saveDB上找到与该确切信息匹配的一行,然后将其删除或将其值更改为“”。
答案 0 :(得分:1)
两件事: 第一个是好像您在第二个循环而不是j上迭代i。
for (j=0; j<data.length;**i++**) {
这可能是问题的一部分。
像我在这里所做的那样,会为您所做的工作吗?
function deleteRows() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet()
var range = sheet.getRange("A4:A10");
var data = [1,4,6,8];
var lastRangeRow = range.getLastRow();
var firstRangeRow = range.getRow();
for (var i=lastRangeRow;i > firstRangeRow - 1;i--) {
for (j=0; j<data.length;j++) {
if ( i == data[j]) {
sheet.deleteRow(i);
}
}
}
}
答案 1 :(得分:0)
我认为这是您要实现的目标:
function replaceRowsWithEmptyRows() {
var ss=SpreadsheetApp.getActive();
var sh1=ss.getSheetByName('Sheet1');
var rg=sh1.getDataRange();
var dA=rg.getValues();
var csA=dA[0].slice(0);//csA has a copy of whats in dA[0]
var mtA=csA.map(function(el){return ''});//mtA has csA.length nulls
for(var i=0;i<dA.length;i++) {
if(csA.join('')==dA[i].join('')) {//comparing the contents of the arrays
dA[i]=mtA;//if they match then replace current row with empties
}
}
var sh2=ss.getSheetByName('Sheet2');
sh2.clear();
sh2.getRange(1,1,dA.length,dA[0].length).setValues(dA);//Displayed results in Sheet2
}
Sheet1:
Sheet2: