【发布时间】:2019-03-21 19:11:06
【问题描述】:
我正在尝试在 google sheet 脚本中构建一个脚本,该脚本将逐行迭代工作表,如果它在该行的第一个单元格中遇到与上面的相同的 ID 号,它从除 A 列和 B 列之外的每个单元格中删除数据,并将其附加到上面的行。理想情况下,这适用于不确定数量的重复行 ID,可能是 2、可能是 3、可能是 4。
在删除我想要保留的数据(例如列 C 及以后)之后,我想删除已处理的重复 ID 行的全部内容,但我只是在它复制之后才将其放入我的脚本中数据正确。
在此示例中,工作表第 6、7 和 8 行具有相同的 ID 号(A 列)
这是我想要得到的结果:
这是我得到的结果:
我尝试了许多不同的方法,并且多次拆除并重建我的脚本,但没有得到我想要的结果:
function stripMiner() {
var ss = SpreadsheetApp.openById("1WDPoTICQvdruxfhAwHLtA51fz05DqyZ-NhNfpAyPO6Y");
var mainSheet = ss.getSheetByName("Main");
var startRow = 5;
var numRows = mainSheet.getLastRow();//obtains the last row in the sheet
var setrgh = mainSheet
var dataRange = mainSheet.getRange(startRow, 1,4,120); //rowStart, columnStart, row count, column count, the columncount needs to be large enough to encompass all your ancillary data
var data = dataRange.getValues();
var iter = 0;
var maxItRow = 4;
var prevIdNum = 0;
var dupCount = 1;
var cc1 = "P5"; //Cells to dump check values into
var cc2 = "P6";
var dumpRow = startRow;
//if (numRows >= maxItRow){var maxIter = maxItRow;}
for (i in data){
if (iter != maxItRow){ //making sure we haven't gone over the iteration limit
var row = data[i];
var idNum = (row[0]);
var jCount = 0; //resets icount if the id number is different icount is used to skip some cells in a row
if (idNum == prevIdNum){//only proceed if we've hit another line with the same ID number
dupCount = +1; //increment the dupcount value
mainSheet.getRange(cc2).setValue("dupCount"+dupCount); //dupcount check value
var rowIterStart = 5; //RowIterStart is used to add to rowiter, EG if your data is 20 columns wide, and you start transposing from column 4, then this will want to be about 17
var rowIter = 1;
for (j in row){
if (jCount >= 2){ //the integer here is the column where it will begin to transpose data
mainSheet.getRange(dumpRow-1,(rowIterStart*dupCount)+(rowIter)).setValue(row[j]); //startRow+(iter-dupCount)
mainSheet.getRange(cc1).setValue("dumprow"+dumpRow);
}
rowIter+=1;
jCount +=1;
}
}
else{
var dupCount = 1;
dumpRow +=1;
}
prevIdNum = (row[0]); //sets the most recently processed rows ID number
}
iter +=1;
}
}
我不太确定我哪里出错了。有没有人有什么建议?谢谢!
(此外,我还只是一个初学者,所以如果我忽略了任何明显的事情或采取了错误的方法来做到这一点,我深表歉意!)
【问题讨论】:
-
好的,你能发个链接到你的工作表吗,我明天上午看看。
-
第 7 行和第 8 行是否需要留空或一并删除?
-
您只是在检查以前的 id。前向迭代比后向迭代更好。循环遍历每个数据行的数据>,再次遍历所有剩余数据以检查相同的 ID。
标签: javascript google-apps-script google-sheets