Google表格脚本-从驱动器文件夹加载文件

时间:2019-01-19 02:10:50

标签: google-apps-script google-sheets google-drive-api

我有一个作为模板的电子表格。我有一个提交按钮,可将数据(按日​​期和客户名称)存储在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脚本(通过从下拉菜单中选择文件名)。

有关如何实现这一目标的任何指示?

1 个答案:

答案 0 :(得分:0)

  • 您已经具有下拉列表。
  • 从下拉列表中选择文件名之一时,您想将文件作为浏览器的新标签打开。

我对您的问题了解如上。这个示例脚本怎么样?该示例脚本的流程如下。

  1. 在下拉列表中选择文件名。
  2. 文件名存在时,打开一个用于运行Javascript的对话框,并将所选文件打开到浏览器的新选项卡。
  3. 打开新标签页后,焦点将移至新标签页上。
  4. 打开新标签页后,电子表格对话框关闭。

示例脚本:

使用此示例脚本时,请执行以下流程。

  1. 请将以下示例脚本复制并粘贴到具有下拉列表的电子表格的绑定脚本中。
  2. 此脚本使用OnEdit事件。因此,请将OnEdit触发器安装到openFile()
  3. 请修改Sheet1中的var sheet = "Sheet1"。此示例假定下拉列表位于“ Sheet1”中。
  4. 请修改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()中。因此,请执行以下操作。

  1. 删除onEdit()的功能。
  2. 安装openFile()作为OnEdit触发器。
    • 这样,当您在下拉列表中选择文件名时,openFile()将由安装的触发器自动运行。当时,给出了事件对象的e。

如何安装OnEdit触发器:

  1. 打开脚本编辑器。
  2. 编辑->当前项目的触发器。
  3. 点击“添加触发器”。
  4. 将“ openFile”设置为“选择要运行的功能”。
  5. 将“来自电子表格”设置为“选择事件源”。
  6. 将“选择事件类型”设置为“正在编辑”。