Google apps script Google Sheets脚本-从驱动器文件夹加载文件
我有一个作为模板的电子表格。我有一个提交按钮,它将数据保存在一个文件中(按日期和客户名称),并保存到谷歌硬盘文件夹中 我想编辑已提交的模板,因此我创建了一个下拉菜单,使用以下代码从文件夹中提取文件名:Google apps script Google Sheets脚本-从驱动器文件夹加载文件,google-apps-script,google-sheets,google-drive-api,Google Apps Script,Google Sheets,Google Drive Api,我有一个作为模板的电子表格。我有一个提交按钮,它将数据保存在一个文件中(按日期和客户名称),并保存到谷歌硬盘文件夹中 我想编辑已提交的模板,因此我创建了一个下拉菜单,使用以下代码从文件夹中提取文件名: function onOpen() { list_all_files_inside_one_folder_without_subfolders() } function list_all_files_inside_one_folder_without_subfolders() { var
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());
}
}
}
函数onOpen(){
列出\u一个\u文件夹中的\u所有\u文件,\u而不列出\u子文件夹()}
功能列表\u所有\u文件\u在\u一个\u文件夹中\u没有\u子文件夹(){
var sh=SpreadsheetApp.getActiveSheet();
var folder=DriveApp.getFolderById('0B8xnkPYxGFbUMktOWm14TVA3Yjg');//我在这里更改文件夹ID
var列表=[];
list.push(['Name'];/,'ID','Size']);
var files=folder.getFiles();
while(files.hasNext()){
file=files.next();
变量行=[]
row.push(file.getName())/,file.getId(),file.getSize())
列表。推送(行);
}
sh.getRange(2,2,list.length,list[0].length).setValues(list);
}
功能OneEdit(e){
openFile()}
函数openFile(e){
var sheet=“Sheet1”//请使用下拉列表设置工作表。
var range=“A1”//请设置下拉列表的范围。
if(e.source.getSheetName()==工作表和&e.range.getA1Notation()==范围){
var file=DriveApp.getFilesByName(e.value);
if(file.hasNext()){
var f=file.next();
var url=f.getUrl();
var script=“window.open”(“+url+”,“\u blank”).focus();google.script.host.close();
var html=HtmlService.createHtmlOutput(脚本);
SpreadsheetApp.getUi().showModalDialog(html,“Open”+f.getName());
}
}
}
然后,我按名称创建了这些文件列表的下拉列表。
我想创建一个可以打开文件的OnEdit脚本(通过从下拉菜单中选择文件名)
关于如何实现这一点,有什么建议吗?- 您已经有了下拉列表
- 从下拉列表中选择其中一个文件名时,您希望将该文件作为浏览器的新选项卡打开
openFile()
var sheet=“Sheet1”
的Sheet1
。此示例假定下拉列表放在“Sheet1”中var range=“A1”
的A1
。此示例假定下拉列表放在单元格“A1”中函数openFile(e){
var sheet=“Sheet1”//请使用下拉列表设置工作表。
var range=“A1”//请设置下拉列表的范围。
if(e.source.getSheetName()==工作表和&e.range.getA1Notation()==范围){
var file=DriveApp.getFilesByName(e.value);
if(file.hasNext()){
var f=file.next();
var url=f.getUrl();
var script=“window.open”(“+url+”,“\u blank”).focus();google.script.host.close();
var html=HtmlService.createHtmlOutput(脚本);
SpreadsheetApp.getUi().showModalDialog(html,“Open”+f.getName());
}
}
}
注:
- 在上面设置之后,当您在下拉列表中选择一个文件名时,该文件将作为“新建”选项卡打开
- 这个脚本是一个简单的示例。所以请根据你的情况修改它
- 在这个示例脚本中,当有多个文件具有相同的文件名时,将打开第一个搜索到的文件。如果您想修改它,请根据您的情况修改脚本
函数onEdit(e){openFile()}
<onEdit(e)
的code>e未提供给openFile()
。这样,就会出现这样的错误。因此,请将OnEdit触发器安装到函数openFile()
。因此,请按以下步骤操作
onEdit()
的功能openFile()
作为OneEdit触发器。
- 这样,当您在下拉列表中选择文件名时,安装的触发器会自动运行
。此时,给出事件对象的eopenFile()
为了正确了解你的情况,我可以问一下你吗?您已经有了下拉列表。从下拉列表中选择其中一个文件名时,您希望将该文件作为浏览器的新选项卡打开。我的理解正确吗?@Tanaike,你大部分都明白了。我更喜欢在同一个选项卡中打开它(替换模板)。但如果不可能的话,一个新的标签是我第二个最好的选择。谢谢你的回复。我贴出了答案。你能确认一下吗?如果我误解了你的问题,我道歉。@Tanaike我更新了我的原始帖子,加入了你的代码(以及整个代码)。但是,下拉菜单不起任何作用,也不起作用。Sheet name=Sheet1,下拉列表位于单元格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());
}
}
}