我正在尝试创建一个脚本,该脚本将从活动单元格中获取图像的URL,打开一个对话框并显示该图像。通过大量的谷歌搜索和试验和错误,我提出了下面的代码,当用户点击"阅读单元格B2"时,会在对话框中显示图像。按钮。请参阅this link中的电子表格。
问题:如何避免"读取单元格B2按钮"以便在对话框打开时自动加载图像?
IndexQ.html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<script>
function onSuccess(B2Value) {
//document.getElementById('output').innerHTML = B2Value;
document.getElementById('img2').src = B2Value;
}
</script>
<div>
<input type="button" value="Read Cell B2"
onclick="google.script.run.withSuccessHandler(onSuccess).returnCellValue('B2')" />
<br />
Cell B2 contains value: <div id="output"></div>
<br />
<img id="img2" src="" alt="Second Image" height="300">
<input type="button" value="Close Sidebar" onclick="google.script.host.close()" /></div>
</body>
</html>
和Code.gs:
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Sidebar').addItem('OpenDialog', 'openDialog').addItem('OpenSidebar', 'openSidebar').addToUi()
}
function returnCellValue(cell) {
return SpreadsheetApp.getActiveSheet().getRange(cell).getValue();
}
function openDialog() {
var html = HtmlService.createHtmlOutputFromFile('IndexQ').setSandboxMode(HtmlService.SandboxMode.IFRAME).setHeight(500);
SpreadsheetApp.getUi().showModalDialog(html, 'Dialog title');
}
答案 0 :(得分:1)
您可以将模板化HTML与scriptlet一起使用:
<img id="img2" src="<?!= returnCellValue('B2') ?>" alt="Second Image" height="300">
您需要修改打开对话框的代码:
function openDialog() {
var html = HtmlService.createTemplateFromFile('IndexQ')
.evaluate()
.setSandboxMode(HtmlService.SandboxMode.IFRAME).setHeight(500);
SpreadsheetApp.getUi().showModalDialog(html, 'Dialog title');
}
请注意createTemplateFromFile()
和evaluate()
方法。
或使用在打开对话框时运行的onload
函数:
<script>
console.log('it ran!');
window.onload = function() {//Runs after dialog is loaded
google.script.run.withSuccessHandler(onSuccess).returnCellValue('B2');
};
</script>
</html>
答案 1 :(得分:0)
onload解决方案正在使用窗口类。当我在google脚本窗口中输入一个点后跟一个点,我没有得到子类弹出选项,所以我不知道我可以输入“onload”。我怎么知道window.online代码可以工作,或者我怎么知道它甚至在那里?
是否可以通过window.onload执行此代码:
window.top.document.getElementsByClassName("script-application-sidebar")[0].style.width='300px' "300px"
?
我共享的电子表格还有OpenSidebar子菜单,可以打开侧边栏。我放弃了这种方法,因为我无法使侧边栏足够宽以显示图像。如果从控制台运行,此脚本将完成此任务。到目前为止,我找到一个解决方案并不幸运,但是现在有了这个window.onload的东西,它可能会成为可能吗?