Я разделяю лист данных на несколько листов, используя адрес электронной почты в качестве уникального идентификатора.
Я использую вариант какого-то скрипта, который я нашел и отредактировал, но использую copyTo, а не appendRow.
Проблема в том, что он, кажется, копирует последнюю строку определенного набора данных на следующий лист.
Я подумал, что это, возможно, потому, что я использую getActiveSheet, а не явно таргетинг правильный лист, поэтому я попытался сделать это, используя что-то вроде: getSheetByName (emailAddress [i] [0]).
Однако это продолжает возвращаться с нулевым значением. Когда я регистрирую значения emailaddress, смотрю в регистратор, значения отображаются правильно, поэтому не совсем понимаю, почему я получаю null.
Ниже приведен сценарий, который «работает», но копирует последнюю строку на следующий лист.
function myFunction() {
var theWorkbook = SpreadsheetApp.getActiveSpreadsheet();
var theSheet = theWorkbook.getSheetByName("Copied");
// This var will contain all the values from column B -> The email addresses
var theEmails = theSheet.getRange("B:B").getValues();
// This var will contain all the rows
var rows = theSheet.getDataRange().getValues();
//Set the first row as the header
var header = rows[0];
//Store the Sheets already created
var completedSheets = []
//The last created Sheet
var last = theEmails[1][0]
for (var i = 1; i < theEmails.length; i++) {
//Check if the Sheet is already done, if not create the sheet
if(!completedSheets.includes(theEmails[i][0])) {
//Set the Sheet name = email address (except if there is no name, then = Blank)
if (theEmails[i][0] === "") {
var currentSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet("Blank");
} else {
var currentSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(theEmails[i][0]);
}
//append the header
currentSheet.appendRow(header);
var rowtocopy = theSheet.getRange(i,1,1,8);
rowtocopy.copyTo(currentSheet.getRange(currentSheet.getLastRow()+1, 1));
completedSheets.push(theEmails[i][0])
last = theEmails[i][0]
} else if (last == theEmails[i][0]) {
// If the sheet is created append the row to the sheet
var currentSheet = SpreadsheetApp.getActiveSpreadsheet();
var activespreadsheet = SpreadsheetApp.getActiveSheet();
var rowtocopy = theSheet.getRange(i,1,1,8);
rowtocopy.copyTo(activespreadsheet.getRange(activespreadsheet.getLastRow()+1, 1));
}
}
}
И фрагмент кода, в котором я пытаюсь назвать лист (и многие его варианты), хотя это возвращает нулевую ошибку.
else if (last == theEmails[i][0]) {
// If the sheet is created append the row to the sheet
var currentSheet = SpreadsheetApp.getActiveSpreadsheet();
var activespreadsheet =SpreadsheetApp.getActive().getSheetByName(last);
var rowtocopy = theSheet.getRange(i,1,1,8);
rowtocopy.copyTo(activespreadsheet.getRange(activespreadsheet.getLastRow()+1, 1));
Что я делаю не так?