我有一个作为模板的电子表格。我有一个提交按钮,可将数据(按日期和客户名称)存储在Google云端硬盘文件夹中。
我想编辑一个已经提交的模板,所以我创建了一个下拉菜单,使用以下代码从文件夹中提取文件名:
function onOpen() {
list_all_files_inside_one_folder_without_subfolders() }
function list_all_files_inside_one_folder_without_subfolders() {
var sh = SpreadsheetApp.getActiveSheet();
var folder = DriveApp.getFolderById('0B8xnkPYxGFbUMktOWm14TVA3Yjg'); // I change the folder ID here
var list = [];
list.push(['Name']); //,'ID','Size']);
var files = folder.getFiles();
while (files.hasNext()){
file = files.next();
var row = []
row.push(file.getName()) //,file.getId(),file.getSize())
list.push(row);
}
sh.getRange(2,2,list.length,list[0].length).setValues(list);
}
function onEdit(e) {
openFile() }
function openFile(e) {
var sheet = "Sheet1"; // Please set the sheet with the dropdown list.
var range = "A1"; // Please set the range of dropdown list.
if (e.source.getSheetName() == sheet && e.range.getA1Notation() == range) {
var file = DriveApp.getFilesByName(e.value);
if (file.hasNext()) {
var f = file.next();
var url = f.getUrl();
var script = "<script>window.open('" + url + "', '_blank').focus();google.script.host.close()</script>";
var html = HtmlService.createHtmlOutput(script);
SpreadsheetApp.getUi().showModalDialog(html, 'Open ' + f.getName());
}
}
}
然后我按名称创建了这些文件列表的下拉列表。 我想创建一个可以打开文件的OnEdit脚本(通过从下拉菜单中选择文件名)。
有关如何实现这一目标的任何指示?
答案 0 :(得分:0)
我对您的问题了解如上。这个示例脚本怎么样?该示例脚本的流程如下。
使用此示例脚本时,请执行以下流程。
openFile()
。Sheet1
中的var sheet = "Sheet1"
。此示例假定下拉列表位于“ Sheet1”中。A1
中的var range = "A1"
。此示例假定下拉列表位于单元格“ A1”中。function openFile(e) {
var sheet = "Sheet1"; // Please set the sheet with the dropdown list.
var range = "A1"; // Please set the range of dropdown list.
if (e.source.getSheetName() == sheet && e.range.getA1Notation() == range) {
var file = DriveApp.getFilesByName(e.value);
if (file.hasNext()) {
var f = file.next();
var url = f.getUrl();
var script = "<script>window.open('" + url + "', '_blank').focus();google.script.host.close()</script>";
var html = HtmlService.createHtmlOutput(script);
SpreadsheetApp.getUi().showModalDialog(html, 'Open ' + f.getName());
}
}
}
问题的原因是function onEdit(e) {openFile()}
。 e
中的onEdit(e)
未分配给openFile()
。由此,发生这种错误。因此,请将OnEdit触发器安装到函数openFile()
中。因此,请执行以下操作。
onEdit()
的功能。openFile()
作为OnEdit触发器。
openFile()
将由安装的触发器自动运行。当时,给出了事件对象的e。