Я пытаюсь создать скрипт в скрипте листов Google, который будет перебирать лист, строка за строкой, и если в первой ячейке этой строки встречается идентификационный номер, идентичный указанному выше, онизвлекает данные из каждой ячейки, кроме столбцов A и B, и добавляет их к строке выше.В идеале это будет работать с неопределенным числом дубликатов идентификаторов строк, может быть 2, может быть 3, может быть 4.
После удаления данных, которые я хочу сохранить (например, столбцы C и далее), язатем хочу удалить все содержимое обработанной строки идентификатора-дубликата, но я просто не включил это в свой скрипт до тех пор, пока он не скопирует данные правильно.
В этом примере строки листа 6, 7 и 8имеют идентичные идентификационные номера (столбец 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;
}
}
Я не совсем уверен, где я иду не так.У кого-нибудь есть предложения?Спасибо!
(Кроме того, я еще новичок в этом вопросе, поэтому, если я упустил что-то очевидное или выбрал неправильный подход, прошу прощения!)