@Toomaas

Как пропустить ошибку, если при создании листа копированием такой лист уже есть?

Создаю листы копированием листа-примера, именуя их по списку из диапазона на другом листе.
Вопрос заключается в следующем: иногда надо запустить создание, чтобы досоздать 1-2 листа с именами из списка, листов с которыми ещё нет, не удаляя остальные. При попытке запустить код, если хоть один лист с именем из списка уже есть, документ, естественно выдает ошибку, что лист с таким именем уже есть и останавливает цикл. Как сделать, чтобы если лист с именем из списка уже есть в документе, это имя просто пропускалось? Чтобы создались листы только с теми именами, листы с которыми ещё отсутствуют?
Примерно: перед setName(name) проверяется .getSheets() и если такое name уже есть, то перейти к следующему name.

function CopySheets() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName('СписокИмён');
var ranges = sheet.getDataRange();
var lastRow = ranges.getLastRow();
var names = sheet.getRange(`A3:A${lastRow}`).getDisplayValues().flat();
names = names.filter(name => { return (name && name.length > 0) });
var sheetSample = ss.getSheetByName('Пример');
  names.forEach(name => {
    var sheetTemp = sheetSample.copyTo(ss)
    sheetTemp.setName(name);
});


Заранее благодарю!
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
oshliaer
@oshliaer Куратор тега Google Apps Script
Google Products Expert
Вам нужно проверить, есть ли такой лист перед установкой имени

Добавить со случайным именем:

const nameTo = ss.getSheetByName(name) ? `${name}_${new Date().getTime()}` :  name;
sheetTemp.setName(nameTo);


Удалить перед вставкой нового:

if(ss.getSheetByName(name)) {
  ss.deleteSheet(name);
}


Просто пропустить, ничего не делать:

if(!ss.getSheetByName(name)) {
  sheetTemp.setName(name);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы