2

Ich versuche, alle Editoren eines Google Spreadsheet in einem HTML-Iframe in einer Google Sheet-Seitenleiste aufzulisten. Wie Sie im folgenden Code sehen können, zeige ich die Ergebnisse im Logger; Es funktioniert dort, zeigt mir die Liste der Editoren. Aber wenn ich die Ergebnisse mit google.script.run an die HTML-Datei übergebe, scheint es auf dem Weg "verloren" zu gehen. Ich erhalte keine Fehler, nur eine Null-Liste in der Seitenleiste.Client successHandler wird null, aber Serverprotokolle zeigen Ergebnisse

Ich habe den folgenden Code in dem .gs:

function myFunction() { 
    var html = HtmlService.createHtmlOutputFromFile('form1'); 
    SpreadsheetApp.getUi() // Or DocumentApp or FormApp. 
     .showSidebar(html); 
} 

function editores() { 
    var editors = SpreadsheetApp.getActiveSpreadsheet().getEditors(); 
    for (var i = 0; i < editors.length; i++) { 
    var editor = editors[i]; 
    Logger.log(editor) 
    } 
    return editors;  
} 

Und diesen Code in dem HTML:

<!DOCTYPE html> 
<html> 
    <head> 
    <base target="_top"> 
    <script> 
    function listEditors(editors) { 
     for (var i = 0; i < editors.length; i++) { 
     var eltag = document.getElementById('edit').innerHTML; 
     var edit = editors[i]; 
     document.getElementById('edit').innerHTML = eltag+'<br/>'+edit; 
     } 
    } 

    google.script.run.withSuccessHandler(listEditors).editores(); 
    </script> 
    </head> 
    <body> 

    <p id='edit'></p> 
    </body> 
</html> 

Wenn ich myFunction() ausführen öffnet es die Seitenleiste eine Liste von "null" zeigt . Aber wenn ich den Logger in der Skriptkonsole öffne, zeigt er die Liste der Editoren an ... Scheint so, als ob die Daten auf dem Weg "verloren" sind.

+0

aus irgendeinem Grund funktioniert getEditors nicht für mich, aber abgesehen davon funktioniert dein Code perfekt, Siehst du irgendeinen Fehler in der Javascript Konsole? –

+0

keine Fehler, nur eine Null-Liste in der Seitenleiste –

Antwort

2

Sie vorbei ein Array von Google Apps Script User objects, und da nur einfache Objekte an den Client * zurückgeschickt werden, ist das Ergebnis null.

Eine Möglichkeit, dies zu beheben, ist getEmail() zu verwenden, für jeden Benutzer-Adresse als String zu erhalten, und ein Array von denen:

function editores() { 
    var editors = SpreadsheetApp.getActiveSpreadsheet().getEditors(); 
    var editorStrArray = []; 
    for (var i = 0; i < editors.length; i++) { 
    var editor = editors[i]; 
    Logger.log(editor); 
    editorStrArray.push(editor.getEmail()) 
    } 
    return editorStrArray;  
} 

* Die Dokumentation für google.script.run sagen, dass die Regeln für Rückgabewerte (an successHandlers) sind die gleichen wie für Parameter zu serverseitigen Funktionen, speziell:

Rechtliche Parameter sind JavaScript Primitive wie eine Zahl, Boolean, String oder null sowie JavaScript-Objekte und -Arrays, die aus Primitiven, Objekten und Arrays bestehen.

+0

Danke @Mogsdad! Es funktionierte –