У меня есть довольно базовый c лист, настроенный для создания ежемесячных форм проверки для оперативников за несколько рабочих смен, путем считывания данных о производительности из центрального файла в предварительно отформатированный документ в зависимости от смены и имени, выбранного в раскрывающихся списках.
Мое намерение состоит в том, чтобы после того, как я выбрал смену, мой сценарий выполняет итерацию по раскрывающимся именам операторов и выплевывает заполненный контрольный лист по операциям.
Я в большинстве случаев лучше так как я смог объединиться с помощью приведенного ниже сценария, который проходит через рабочие имена, копируя / вставляя только значения целого листа во временный лист для вырезания формул, а затем копируя этот временный лист во вновь созданный ежемесячный файл и переименование дублированного листа в оперативное имя.
Единственная проблема, с которой я сталкиваюсь, заключается в том, что именованный диапазон для оперативных имен установлен как Диапазоны! B2: B151 в базе файл, однако фактический список имен может быть только первым 20-30 ячеек, в зависимости от количества оперативников на выбранную смену. Поэтому сценарий завершается ошибкой, когда он попадает в первое пустое значение в конце списка имен.
Может кто-нибудь предложить настройку, чтобы учесть изменяющуюся длину раскрывающегося списка, пожалуйста. Я уверен, что упускаю что-то довольно очевидное для более опытных. Я пробовал искать, однако, не зная моей терминологии, я не вижу дрова для деревьев.
function loopExport() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Report');
var month = sheet.getRange('N6:Q6').getValue();
var shift = sheet.getRange('B6:C6').getDisplayValue();
var data = ss.getSheetByName('Ranges').getRange('Names').getValues();
var ssnewname = "Operative Reviews - "+shift+" - "+month;
var ssnew = SpreadsheetApp.create(ssnewname);
var tempsheet = ss.getSheetByName('TempCopy');
// Get dropdown values from named range Names
for (var i = 0; i < data.length; i++) {
// Assign dropdown values in Report
sheet.getRange('E6:G6').setValue(data[i][0]);
// For each name, copy & paste values-only into temp sheet
sheet.getRange('A1:Q52').copyTo(tempsheet.getRange("A1"),{contentsOnly:true});
var opname = tempsheet.getRange('E6:G6').getValue();
// For each name, copy temp sheet to new workbook ssnew and set name to operative name
tempsheet.copyTo(ssnew).setName(opname);
}
}