google-apps-script - 在模态对话框中显示来自谷歌驱动器文件夹的文件列表
问题描述
嗨,我正在尝试获取要使用 .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 脚本方面
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()
完成后,function
ofwithSuccessHandler(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()
运行。然后,显示文件列表。 - 这是一个简单的示例脚本。所以请根据您的实际情况进行修改。
参考:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
推荐阅读
- c# - MySql.Data.MySqlClient.MySqlException:“用户'hobo'@'49.70.207.34'的访问被拒绝(使用密码:是)”
- ruby - 我的代码计数出现的字符有问题
- python - Python Dictonaries - 使用相同的键附加新字典而不删除最后一个
- oauth-2.0 - 调用由 Identity Server 3 保护的 .Net Core 2.2 API 时出现 401 - 未经授权的错误
- sql - SQL Join 三个表
- c# - Asp.net Core Log4net FileNotFoundException
- php - 如何在 'JOIN' sql 查询中使用 'WHERE'
- angular - Angular cdk 滚动:更新视图中未显示的数据源
- crash - 是否可以通过覆盖整个堆栈使整个计算机因缓冲区溢出而崩溃?
- php - PHP - 重复操作变得越来越慢