首页 > 解决方案 > 在模态对话框中显示来自谷歌驱动器文件夹的文件列表

问题描述

嗨,我正在尝试获取要使用 .showModalDialog 显示的驱动器文件夹中的文件列表,这是我到目前为止所拥有的

///gs.code

function ImportSBMessage() {
        var html = HtmlService.createHtmlOutputFromFile('Message');
        SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
       .showModalDialog(html, 'List of files in folder');
}

function getfiles(){

    var id = DriveApp.getFoldersByName('attach to Email').next().getId();
    var files = DriveApp.getFolderById(id).getFiles();
   while (files.hasNext()) {
    var file = files.next();
    Logger.log(file);
    return file
  }

}

///html........(这部分我不知道怎么做,所以它会返回我的文件列表)

<!DOCTYPE html>
<html>
<head>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" 
  href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">

</head>
 <body>
   <script>

   google.script.run.withSuccessHandler().getfile();


   </script>






  </body>
</html>

谢谢

标签: google-apps-scriptgoogle-sheets

解决方案


  • 您要检索文件夹下的文件列表。
  • 您想在对话框中显示文件列表。

如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。

修改点:

对于 Google Apps 脚本方面

  • var id = DriveApp.getFoldersByName('attach to Email').next().getId();并且var files = DriveApp.getFolderById(id).getFiles();可以修改为var files = DriveApp.getFoldersByName('attach to Email').next().getFiles();.

对于 HTML 端

  • 运行时, Google Apps Script 端google.script.run.withSuccessHandler().getfile()没有功能。getfile()在 Google Apps 脚本端,函数名称是getfiles().
  • 在您的情况下,您可以使用从getfiles()Google Apps 脚本端检索到的列表withSuccessHandler()
    • google.script.run.withSuccessHandler().getfile(),getfile()完成后, functionofwithSuccessHandler(function)运行。那时,来自的值getfile()可以用作参数。

修改后的脚本:

当你的脚本被修改时,下面的修改呢?

Google Apps 脚本方面:

getfiles()进行如下修改。

function getfiles(){
  var files = DriveApp.getFoldersByName('attach to Email').next().getFiles();  // Modified
  var fileList = [];  // Added
  while (files.hasNext()) {
    var file = files.next();
    fileList.push({filename: file.getName(), fileId: file.getId()});  // Added
  }
  return fileList;  // Modified
}
  • 在此修改中,文件的文件名和文件 ID 作为数组返回。

HTML 方面:

请修改body标签如下。从您的 HTML 中,我可以确认您使用的是 jquery。所以这个修改也用到了。

<body>
  <ul></ul> <!-- Added -->
  <script>
  google.script.run.withSuccessHandler(list => {  // Modified
    const li = list.reduce((s, e) => s += "<li>" + e.filename + "(" + e.fileId + ")</li>", "");
    $("ul").append(li);
  }).getfiles();
  </script>
</body>
  • 在此修改中,使用检索到的数组附加列表。

笔记:

  • 在上述修改后的脚本中,当ImportSBMessage()在脚本编辑器中运行时,会打开一个对话框并getfiles()运行。然后,显示文件列表。
  • 这是一个简单的示例脚本。所以请根据您的实际情况进行修改。

参考:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。


推荐阅读