как заставить deleteSheet работать для сложных имен листов - PullRequest
0 голосов
/ 03 июля 2019

У меня есть надстройка Google, которая управляет несколькими листами в электронной таблице Google.Одна из вещей, которую он делает, - это удаление листов на основе дат, которые являются именами листов, которые он удаляет.На моем текущем этапе разработки я также добавляю возможность удалять листы, которые включают дату и другой термин, в частности "script 6/5/2019", например.

Я использую тот же код, который работал для листов, названных датой, и внес в нее некоторые изменения, но при удалении листа возвращается ошибка: "Cannot find method deleteSheet(string)"

 if(sRemove==true) {
  SpreadsheetApp.getActiveSpreadsheet().toast('Finding Old Scripts', 'Status',3);
    for (var i = ss.getNumSheets()-1; i >= 0; i--) {
    
        var thisTab = ss.getSheets()[i].getName();
        if(thisTab.substr(0,6) =="script") {
        Logger.log(i+" "+thisTab+" is a script");
        var tabDate = new Date(thisTab.substr(8)); 
        //8 is the first digit of the date
        Logger.log(tabDate);
        var thisDate = new Date(todayDate);
  
        var patt = new RegExp("s");
        var res = patt.test(thisTab);
        Logger.log(i+" "+res);

        if(tabDate<thisDate && res==true) { 
           var ss = SpreadsheetApp.getActiveSpreadsheet();
           //ss.setActiveSheet(ss.getSheetByName(thisTab));
           //ss.deleteActiveSheet(ss.getSheetByName(thisTab));   
           Logger.log(thisTab);
           ss.deleteSheet(thisTab);
           tabsGone++;
        }
     }
  }
  ui.alert(tabsGone+" Sheets Removed");
  }

Logger.log возвращает правильное имя удаляемого листа, но удаление листа возвращает ошибку "Cannot find method deleteSheet(string)"

1 Ответ

3 голосов
/ 03 июля 2019

Требования:

Удалить лист на основе имени.


Решение:

Используйте getSheetByName(), чтобы получить объект листа, затем передайте его вашему deleteSheet():

ss.deleteSheet(ss.getSheetByName(thisTab));

Пояснение:

В настоящее время вы передаете строку thisTab в deleteSheet(), это не сработает, потому что ожидает объект листа, а не строку. Пока ваш код выше работает правильно и thisTab точно соответствует имени вашего листа, все, что вам нужно сделать, это вызвать getSheetByName(thisTab), чтобы получить объект листа, а затем передать это deleteSheet().


Ссылки:

  1. getSheetByName(string)* * 1030
  2. deleteSheet(sheet)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...