我正在尝试在Google工作表边栏内的HTML iframe中列出Google电子表格的所有编辑器。正如您在下面的代码中看到的,我在Logger中显示结果;它在那里工作,向我显示编辑列表。但是当我使用google.script.run
将结果传递给HTML文件时,它似乎在路上“迷路”。我没有收到任何错误,只是侧栏中的“空”列表。
我在.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;
}
这段代码在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>
当我执行myFunction()
时,它会打开侧边栏,显示“null”列表。但是当我在脚本控制台中打开Logger时,它显示编辑器列表很好......似乎数据在途中“丢失”。
答案 0 :(得分:2)
您传递了一系列Google Apps脚本User objects,因为只有简单的对象可以返回到客户端 * ,结果为null
。
解决此问题的一种方法是使用getEmail()
将每个用户的地址作为字符串,并返回其中的数组:
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;
}
* google.script.run
的文档说返回值的规则(对successHandlers)与服务器端函数的参数相同,具体为:
合法参数是JavaScript原语,如Number,Boolean,String或null,以及由基元,对象和数组组成的JavaScript对象和数组。