1)
function CopySheet() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("Список");
var ranges = sheet.getDataRange();
var lastRow = ranges.getLastRow();
var names = sheet.getRange(`A1:A${lastRow}`).getDisplayValues(); // get new sheet names array
names = names.filter(name => (name.length > 0)); // delete empty values
// need check by doubles
var sheetSample = ss.getSheetByName('Пример');
names.forEach(name => { // create new sheets
var sheetTemp = sheetSample.copyTo(ss);
sheetTemp.setName(name);
});
Browser.msgBox('Info', 'Completed! Create: ' + names.length + ' sheets', Browser.Buttons.OK);
};
Работу скрипта не проверял, если будут ошибки, надеюсь справитесь. Скрипт не проверяет список названий листов на дубликаты. Также возможно потребуется перемещение листа в конец книги;
2) в столбце "А" может быть любое количество новых названий;
3) нельзя. Единственное, что можно сделать - при создании нового листа скрыть его, а в конце выполнения скрипта - сделать цикл для отображения всех новых листов. Это имеет смысл делать, если на листах выполняются вычисления (например много формул);
4) реализовано