2013-06-17 3 views
0

Я пытаюсь создать документ Google, который автозаполняет автора, имя документа, дату, созданную и измененную дату в соответствии с документом Word.Документ Google Apps onOpen не работает

У меня есть скрипт, который работает, когда я запускаю редактор сценариев, и когда я запускаю через добавленный пункт меню, но не запускает onOpen.

Это, как я получить доступ к информации:

var document = DocumentApp.getActiveDocument(); 
    var body = DocumentApp.getActiveDocument().getBody(); 
    var bodyText = body.editAsText(); 
    var docID = document.getId(); 
    var docName = document.getName(); 
    var file = DocsList.getFileById(docID); 
    var docCreated = file.getDateCreated().toString(); 
    var docUpdated = file.getLastUpdated().toString(); 

Я тогда просто сделать некоторые находят замену в документе. Кажется, что ничего не работает после

var docName = document.getName(); 

Должен ли быть запущен метод getName()? Я хочу, чтобы пользователи не нажимали кнопку, чтобы обновить документ.

Цените любую помощь.

Митч

ответ

1

Вы можете проверить выполнения стенограмму вашей onOpen() функции запуска, открыв редактор сценариев вскоре после открытия документа, на этапе выбора «View - Execution Стенограмма».

В там вы найдете что-то вроде этого:

[13-08-01 11:53:18:163 EDT] Document.getName() [0 seconds] 
[13-08-01 11:53:18:203 EDT] Execution failed: No item with the given ID could be found, or you do not have permission to access it. (line 41, file "Code") [0.052 seconds total runtime] 

Согласно Understanding Triggers, простые триггеры не предполагается разрешить выполнение услуг, которые требуют проверки подлинности. Это ограничение, по-видимому, не относится к Document.getName(), особенно после того, как Document.getId() успешно сработало. Для этого существует проблема, посетите Issue 3083 и запустите ее, чтобы проголосовать & получать обновления.

Аналогичные проблемы возникают с вашими вызовами метода DocsList, однако они не подпадают под Google Apps Script Security Model, поэтому неудивительно, что они блокируются.

Как обход, вы можете указать, что ваш onOpen() напомнит пользователю установить переменные документа, пока они этого не сделали.

function onOpen(e) { 
    DocumentApp.getUi().createMenu('Menu') 
     .addItem('Set variables', 'setVars') 
     .addToUi(); 

    var doneFirstRun = ScriptProperties.getProperty('doneFirstRun'); 
    if (doneFirstRun == null) { 
    var ui = DocumentApp.getUi(); 
    ui.alert("Set document variables\n\n" 
      +"Select Menu - Set variables"); 
    } 
} 

function setVars() { 
    var ui = DocumentApp.getUi(); 
    var document = DocumentApp.getActiveDocument(); 
    var body = document.getBody(); 
    var bodyText = body.editAsText(); 
    var docID = document.getId(); 
    var url = document.getUrl(); 
    var docName = document.getName();  // Does not work in onOpen 
    var editors = document.getEditors(); // Does not work in onOpen 
    var viewers = document.getViewers(); // Does not work in onOpen 
    var file = DocsList.getFileById(docID); 
    var docCreated = file.getDateCreated().toString(); 
    var docUpdated = file.getLastUpdated().toString(); 

    // ... do actual work here 

    // Completed setting document variables - disable reminder. 
    var doneFirstRun = ScriptProperties.setProperty('doneFirstRun',true); 

    ui.alert("Completed"); 
} 
Смежные вопросы