[英]Updating or inserting data from a Spreadsheet into a Dialog box inside a dropdown
目标:目的是工作表将包含信息,此信息放置在命名范围内,命名范围将是动态的(给整列一个命名范围)。 我创建了一个 html 弹出窗口,其中包含一个下拉列表。 此下拉列表必须包含来自命名范围的信息列表。
我无法理解如何做到这一点。 这是下面的代码:
function fncOpenMyDialog() {
var htmlDlg = HtmlService.createHtmlOutputFromFile('HTML_myHtml')
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setWidth(200)
.setHeight(150);
SpreadsheetApp.getUi()
.showModalDialog(htmlDlg, 'New File');
};
function onInstall(e) {
onOpen(e);
}
function onOpen(e) {
var ui = SpreadsheetApp.getUi();
ui.createMenu('New')
.addItem('New Save File Extension','fncOpenMyDialog')
.addToUi();
}
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<select name="nameYouWant" placeholde="File Type">
<option value="something">Word</option>
<option value="anything">MS Excel</option>
<option value="anything">MS Powerpoint</option>
<option value="anything">MS Slides</option>
</select>
<hr/>
<p>Choose a file, which will then be saved into your Google Drive.</p>
<button onmouseup="closeDia()">Close</button>
<button onmouseup="onOpen()">Save</button>
<script>
window.closeDia = function() {
google.script.host.close();
};
window.saveDia = function() {
onOpen();
};
</script>
</body>
</html>
正如您在我的 html 文件中看到的那样,扩展目前是硬编码的。 我正在尝试使这种动态化,我该如何实现?
我相信你的目标如下。
为此,这个答案怎么样?
google.script.host.close()
,我了解到 HTML_myHtml 的HTML_myHtml
文件包含在 Google Apps 脚本项目中。 通过这个,我想建议使用google.script.run
来实现你的目标。当以上几点反映到您的脚本时,它变成如下。
HTML_myHtml
请按如下方式修改HTML_myHtml
。
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<select id="select" name="nameYouWant" placeholde="File Type"></select>
<hr />
<p>Choose a file, which will then be saved into your Google Drive.</p>
<button onmouseup="closeDia()">Close</button>
<button onmouseup="onOpen()">Save</button>
<script>
google.script.run.withSuccessHandler(v => {
const obj = document.getElementById("select");
v.forEach(e => {
const option = document.createElement("option");
option.text = e;
option.value = e;
obj.appendChild(option);
});
}).readNamedRange();
window.closeDia = function() {
google.script.host.close();
};
window.saveDia = function() {
onOpen();
};
</script>
</body>
</html>
Code.gs
在上面的 HTML 中,使用readNamedRange()
。 所以请输入以下脚本。 如果您有相同的 function 名称,请修改它们。 在这个脚本中,值从listDown
的命名范围中检索,并使用google.script.run
发送到 HTML 端。
function readNamedRange() {
var activeSheet = SpreadsheetApp.getActiveSheet();
var result = activeSheet.getRange("listDown").getValues();
var end = activeSheet.getLastRow();
var values = [];
for (var i = 0; i < end; i++) {
if (result[i][0] != "") {
values.push(result[i][0]);
}
}
return values;
}
window.saveDia = function() {onOpen()};
,不幸的是,我不明白你想做什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.