我正在尝试将对象(工作表行的内容)传递给应用脚本模板。您可以在屏幕截图中看到该行。
我在应用脚本中的功能包含:
var sendableRows = rows.filter(function (row) { //ONLY CHECKED ROWS.
return row['Index'] == true;
});
var sendableRow = sendableRows[0];
Logger.log('sendableRow '+ JSON.stringify( sendableRow));
var html = HtmlService.createTemplateFromFile('RowPopup');
html.row = JSON.stringify(sendableRow);
var h =html.evaluate();
SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
.showModalDialog(h, 'Create Documents');
logger语句产生:
sendableRow {"Index":true,"Timestamp":"2019-02-12T21:09:14.000Z","FROM":222222,"CONVERSATION":"THIS IS A TEST","ME":"","relativeRow":14,"absoluteRow":15}
我的Rowpopup.html是:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script>
// Prevent forms from submitting.
function preventFormSubmit() {
var forms = document.querySelectorAll('forms');
for (var i = 0; i < forms.length; i++) {
forms[i].addEventListener('submit', function(event) {
event.preventDefault();
});
}
}
window.addEventListener('load', preventFormSubmit);
function handleFormSubmit(formObject) {
// the output from form goes to processDocBuildHtml
google.script.run
.withSuccessHandler(updateUrl)
.processRowPopupHTML(formObject);
}
function updateUrl(url) {
var div = document.getElementById('output');
div.innerHTML = '<a href="' + url + '">Sent!</a>';
}
</script>
</head>
<body>
<form id="myForm" onsubmit="handleFormSubmit(this)">
<div>
<label for="optionList">Click me</label>
<select id="optionList" name="email">
<option>Loading...</option>
</select>
</div>
<br>
<div>
</div>
<br>
<div>
<textarea name="message" rows="10" cols="30">
The cat was playing in the garden.
</textarea>
</div>
<div id="textboxes"></div>
<div id="insert"></div>
<input type="submit" value="Submit" />
</form>
<div id="output">
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script src="//rawgithub.com/indrimuska/jquery-editable-select/master/dist/jquery-editable-select.min.js"></script>
<link href="//rawgithub.com/indrimuska/jquery-editable-select/master/dist/jquery-editable-select.min.css" rel="stylesheet">
<script>
function getConversations() {
var jsonRow = <?= row ?>; //PASSED IN JSON
console.log('row');
var myObj = JSON.parse(jsonRow);
console.log(myObj['CONVERSATION']);
return myObj['CONVERSATION'];
}
</script>
</body>
运行此命令时,我看到:
哪个显示了与“ warden”有关的问题。
此外,我在以下位置看不到控制台输出的预期数据:
console.log('row');
var myObj = JSON.parse(jsonRow);
console.log(myObj['CONVERSATION']);
我在做什么错了?
答案 0 :(得分:2)
您的客户端代码从不调用for
,这就是为什么您在控制台上看不到它的原因。在许多方法中,您可以通过在getConversations
标签之间添加以下内容来添加IIFE来调用该函数
<script>
),Chrome开发者工具控制台上也会出现所引用的错误消息
(function (){getConversations()}());
function myFunction(){
var html = HtmlService.createHtmlOutputFromFile('index');
SpreadsheetApp.getUi().showModalDialog(html, 'Test')
}
所以不是你,是Google
答案 1 :(得分:1)
您仅声明了函数getConversations
。在将其称为()
之前,它不会执行。
要在加载时直接执行,请尝试
(function getConversations(){})()
答案 2 :(得分:0)
我有类似的问题。但就我而言,我的大多数用户都没有这个问题。某些PC中只有一些用户。然后我发现,在这种情况下(大约10%),如果他们安装了Firefox并运行了该应用程序,则一切正常。所以这就是我的解决方案:出现这种情况时建议使用Firefox。
答案 3 :(得分:0)
我知道此答案与该OP无关,并且我应该张贴的位置不合适,但是对于以后到达此页面的其他人,我在这里留下答案,因为我一直在努力解决类似的问题。
我认为此错误意味着我们无法从HTML文件连接到用脚本编辑器编写的脚本。
所以基本上您可以忽略此错误消息(也许。如果没有,请告诉我正确的功能。)
对我来说,执行google.script.run.myFunction()
时发生了错误。因此,起初,我认为该错误阻止了此执行。但是,该错误与该执行完全无关。这是另一个问题,我通过使用withFailureHandler(onFailure)
发现了为什么发生了我的问题。它发出错误消息。 (有关更多信息,请访问https://stackoverflow.com/a/33008218/3077059)
正如鲁本先生所说:“不是您,而是Google”,可以很容易地重播此错误。请不要对此消息感到困惑。我认为错误消息(“在传输或处理此请求期间发生错误。错误代码= 10,路径= / wardeninit”)没有用。 鲁本的精彩文章是-> https://stackoverflow.com/a/54756933/3077059
答案 4 :(得分:0)
我的解决方案:使用库脚本的版本化部署。
我遇到了类似的问题,我无法从 Google 表格的侧边栏中运行自己的功能。该问题似乎与使用库有关,即使我尝试执行的脚本不依赖于库。
当库连接到容器脚本时,我无法在侧栏中获取要执行的函数。当我删除库时,一切正常。我使用的是库的头部版本,这意味着最新的开发。我决定尝试管理部署并创建项目版本。我添加了一个库部署和版本,然后更新了我的库参考,一切又恢复了。
参考:
Why does my apps script deployed as API executable return Permission Denied?
https://developers.google.com/apps-script/concepts/deployments
来自 Google 的描述性提醒会有所帮助。