<script>
window.onload = function() {
google.script.run.withSuccessHandler(Loadthis)
.getDataBySheetName('Bulk','all');
}
function Loadthis(data) {
document.getElementById("output").innerHTML = "Loading...wait";
var select = document.getElementById('trythis');
var html = "";
select.innerHTML = html;
for ( var i in data) {
html += "<tr>";
for (var j=0;j<data[i].length;j++) {
html += "<td>"+data[i][j]+"</td>";
}
html += "</tr>";
select.innerHTML = html;
}
document.getElementById("output").innerHTML = "";
}
我正在使用谷歌脚本。部署为网络。所有这些都有可能挖掘这个网站。但我无法通过搜索解决我的这个问题。
我在google脚本中发现onclick按钮无法按预期工作。无论如何在另一个HTML中,我得到了解决方案。制作表格并将按钮放在&lt; / form&gt;然后每当它被调用时,它都能完美无缺地工作。但是这个没有。是因为我已经调用了onload吗?在用户(我)点击按钮之前,我应该将页面置空吗?但我想在发布时显示默认报告。
问题是当我在window.onload中使用一个函数时,google.script.run ....进入withSuccessHandler来完成。但是当我单独声明该函数并在按下一个按钮时让它发生时,google.script.run ...转到withFailureHandler。
document.getElementById("List").onclick = function() {
var sheetname = 'cNow';
alert('Am I called '+sheetname);
getit(sheetname);
}
此处出现警报。所以它必须被召唤。
然后
function getit(sheetname){
var div = document.getElementById('output');
div.innerHTML = 'Am I called '+sheetname;
google.script.run
.withSuccessHandler(Loadthis)
.withFailureHandler(onFailure)
.getDataBySheetName(sheetname,'all');
}
然后,在此之后,我可以看到服务器端Logger.log已成功处理,就像在onload中调用它一样。
但接下来发生的事情是onFailure被称为。 所以我没有调用相同的Loadthis函数,而是在这里创建了不同的copyof和loadofhis,onSuccess并调用了
function getit(sheetname){
var div = document.getElementById('output');
div.innerHTML = 'Am I called '+sheetname;
google.script.run
.withSuccessHandler(onSucess)
.withFailureHandler(onFailure)
.getDataBySheetName(sheetname,'all');
}
function onSuccess(data2) {
var div = document.getElementById('output');
div.innerHTML = "Loading...wait";
var select = document.getElementById('trythis2');
var html = "";
select.innerHTML = html;
for ( var i in data2) {
html += "<tr>";
for (var j=0;j<data2[i].length;j++) {
html += "<td>"+data2[i][j]+"</td>";
}
html += "</tr>";
select.innerHTML = html;
}
document.getElementById("output")
.innerHTML = "Now list loaded...";
}
function onFailure(status) {
var div = document.getElementById('output');
div.innerHTML = 'failed';
}
仍在onFailure上。至于流程的进行,'div - output'首先显示'Am I called Now'然后'failed'。同样,服务器端Logger.log显示成功。
我无法猜测,但如果这是一个事情,我将不得不创建另一个html和代码相同的功能相同但只是一个更改googlesheet被调用。这是浪费时间,精力和资源。
**我已将这些脚本放在正文的底部,以防元件尚未加载。并使windows.onload调用onSuccess,它按预期工作。
除了分别制作每个html之外,您能否建议解决方法?
我的最后一招是单独创建这个javascript文件并使用它来包含。然后使用iframe在按钮点击时调用不同的页面.......我想最终构建一个页面的解决方案。
击>
最近的发展: 1.分离html但仍然无法工作。 2.发现工作表的结构和Bulk的结构相同但数据值有问题。当我将批量数据复制到未显示的数据时,它显示出来了。不需要分离html,但数据中存在问题。
它解决了“timestamp”列中的问题。我正在为旧数据创建删除。然后再没有比较这张表的时间戳。因此,我记得我之前操纵过这个专栏 现在,我将学习如何在工作表中进行数据验证并指出。
如果从google工作表中检索数据,并且某列中var数据的值在某些行中具有不同的格式,尽管数据和所有函数都被成功调用,但它会返回失败。请注意,像我这样的新脚本编写者可以获益。
答案 0 :(得分:0)
在开始时它似乎是编码问题,但它是在数据值上。 然后我发现时间/日期格式不支持传递给Javascript。
这是withFailureHandler返回的错误。
ScriptError:脚本已完成,但返回的值不是支持的返回类型。
我找到了一种使用数组推送的方法。但我无法弄清楚它是如何工作的,并没有解决我的问题。
var options=[];
for(var i=0;i<srange.length;i++)
{
options.push(srange[i][3]);
}
(srange是我用getValues提取数据的地方。) 这个解决方案的一个缺点是即使它可以工作,它还会增加一个“for loop”运行的东西(如果数据表很长,这样做需要很长时间,不是吗?)。在我的情况下,列表不会显示出来。
所以我用google搜索'谷歌脚本如何获取值作为谷歌表的字符串'然后
google app上的getValue()和getDisplayValue()之间的区别... 来了。
甚至没有打开它,我改变了我将getValues称为getDisplayValues()的地方。
sheet.getDataRange().getDisplayValues();
那很容易。
希望这有助于任何遇到此类问题的人。