Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script Google Sheets脚本-从驱动器文件夹加载文件_Google Apps Script_Google Sheets_Google Drive Api - Fatal编程技术网

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脚本(通过从下拉菜单中选择文件名)

关于如何实现这一点,有什么建议吗?

  • 您已经有了下拉列表
  • 从下拉列表中选择其中一个文件名时,您希望将该文件作为浏览器的新选项卡打开
我理解你上面的问题。这个示例脚本怎么样?此示例脚本的流程如下所示

  • 在下拉列表中选择一个文件名
  • 当文件名存在时,打开一个用于运行Javascript的对话框,所选文件将打开到浏览器的“新建”选项卡
  • 打开新选项卡时,焦点将移动到新选项卡
  • 打开新选项卡后,电子表格对话框关闭
  • 示例脚本: 使用此示例脚本时,请执行以下流程

  • 请将以下示例脚本复制并粘贴到具有下拉列表的电子表格的绑定脚本中
  • 此脚本使用OnEdit事件。因此,请将OneEdit触发器安装到
    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触发器。
    • 这样,当您在下拉列表中选择文件名时,安装的触发器会自动运行
      openFile()
      。此时,给出事件对象的e
  • 如何安装OnEdit触发器:
  • 打开脚本编辑器
  • 编辑->当前项目的触发器
  • 单击“添加触发器”
  • 将“openFile”设置为“选择要运行的函数”
  • 将“从电子表格”设置为“选择事件源”
  • 为“选择事件类型”设置“编辑时”

  • 为了正确了解你的情况,我可以问一下你吗?您已经有了下拉列表。从下拉列表中选择其中一个文件名时,您希望将该文件作为浏览器的新选项卡打开。我的理解正确吗?@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());
        }
      }
    }