2012-08-02 2 views
0

Привета StackOverflow сообщества,Google Apps: Дублированный шаблон лист и удалить старый лист

В настоящее время я пытаюсь создать панель с помощью Таблиц Google для моей команды для своих ежедневных задач на еженедельной основе. К концу недели члены команды должны «перезагрузить» лист панели, но у меня возникают проблемы со следующим сценарием. Сценарий должен дублировать «ШАБЛОН» лист, удалить старую панель и переименуйте новую копию в «Dashboard»:

function resetDashboard() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName('TEMPLATE'); 
    sheet.copyTo(ss).setName('New Dashboard'); 
    ss.setActiveSheet(ss.getSheetByName('Dashboard')); 
    ss.deleteActiveSheet(); 
    ss.setActiveSheet(ss.getSheetByName('New Dashboard')); 
    ss.renameActiveSheet('Dashboard'); 
} 

Примечание: «Панель управления» лист является видимым только лист в таблице.

Пока этот скрипт работает нормально. Когда я перезагружаю таблицу, она все еще работает.

Проблема заключается в том, что когда я закрываю электронную таблицу и открываю ее снова из обзора GoogleDocs, сценарий ТОЛЬКО дублирует лист «Шаблон», но остальная часть функции больше не выполняется.

Это ошибка? Есть ли «более чистая» версия/сценарий, который я мог бы использовать?

С наилучшими пожеланиями, Рюдигер

ответ

2

Я думаю, что проблема в том, что «на мгновение» у Вас есть два листа с тем же именем. A SpreadsheetApp.flush() перед переименованием может быть на работу. Попробуйте это:

function resetDashboard() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var newSheet = ss.getSheetByName('TEMPLATE').copyTo(ss); 
    ss.setActiveSheet(ss.getSheetByName('Master')); 
    ss.deleteActiveSheet(); 
    SpreadsheetApp.flush(); //this guarantees that the old sheet is deleted before we proceed 
    newSheet.setName('Master'); 
    ss.setActiveSheet(newSheet); 
} 
0

спасибо за совет с функцией flush(); хотя это не решило проблему, я обнаружил истинную причину, по которой оба наших сценария не работали (мой действительно сделал тоже, просто не заметил).

Это уже сообщалось проблема с функцией deleteActiveSheet():

Issue 1298: deleteActiveSheet() and copyTo() require .sleep(2000) to work reliably

Единственный способ решения проблемы на данный момент, кажется, функция Utilities.sleep(); пример можно найти here.

Благодарим за помощь, которая привела меня к этому. :)

Cheers, Rüdiger

+0

Хорошо .. Я рад, что помог. Но моя версия, кстати, работала над моими испытаниями :) –

Смежные вопросы