Если я вас правильно понимаю, вам нужна функция, которая:
- Создает новый лист для каждого отдельного
Assessment Name
(столбец M
из Sheet1
). - Добавляет строки, соответствующие каждому
Assessment Name
, к соответствующему созданному листу.
Если это так, то вы можете перебрать все данные в Sheet1
, и для каждой строки проверьте, есть ли лист в электронной таблице, имя которого совпадает с соответствующим именем оценки.
Если такой лист существует, скрипт добавляет текущую строку в конец целевого листа.
Если лист не существует, он сначала создает этот лист с верхними заголовками, а затем добавляет текущую строку.
Это достигается использованием appendRow(rowContents)
.
Ваш код может выглядеть следующим образом:
function createNewSheets() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var masterSheet = spreadsheet.getSheetByName('Sheet1');
// Get range with data from original sheet:
var firstRow = 1;
var firstCol = 1;
var numRows = masterSheet.getLastRow();
var numCols = masterSheet.getLastColumn();
var data_range = masterSheet.getRange(firstRow, firstCol, numRows, numCols).getValues();
// Get headers row (to be appended on top when new sheet is created):
var headers = data_range[0];
// Iterate through all rows of data from Sheet1:
for (var i = 1; i < data_range.length; i++) {
var row = data_range[i]; // Current row
var assessmentName = row[12]; // Assessment name
// Get sheet with current assessment name:
var sheet = spreadsheet.getSheetByName(assessmentName);
// Check if sheet with current assessment name exists. If it doesn't it creates it:
if (!sheet) {
sheet = spreadsheet.insertSheet(assessmentName);
sheet.appendRow(headers);
}
// Appends current row of data to the new sheet:
sheet.appendRow(row);
}
}
Кроме того, если вы хотите избежать дублирования строк, добавляемых при каждом запуске скрипта, вы можете столбец в последнем столбце основного листа, который отслеживает, какие строки были скопированы на новый лист, и, если они были скопированы, избегайте добавления их снова. Например, вы можете иметь заголовок столбца в AC
с именем Copied
. Затем, когда строка добавляется, эта строка заполняется, например, строкой «Готово». При следующем запуске сценария он может проверить, имеет ли соответствующая ячейка значение «Готово».
Вы можете, например, изменить конец функции следующим образом:
// Appends current row of data to the new sheet:
sheet.appendRow(row);
}
}
На это:
// Appends current row of data to the new sheet if `AC` column value is not "Done":
if (row[28] != "Done") {
sheet.appendRow(row);
masterSheet.getRange(i + 1, 29).setValue("Done");
}
}
}
Я надеюсь, что это поможет .