警告:我的编程知识为 0
嗨!我需要一些帮助,因为我有 0 编程知识,并且只是尝试运行一个简单的脚本来生成我的 Google Drive My Drive 中所有内容的文件夹列表(第一级即可)。该脚本必须能够返回所有者名称(我知道从技术上讲这应该是我,但每次都有这个很有用)、文件夹的 URL 链接,当然还有文件夹名称。
我刚刚从 Copilot 生成了一个运行良好的脚本,问题是当我尝试在网络应用程序中打开它时,我收到“抱歉,此时无法打开文件。请检查地址并重试。 ”信息。在收到此消息之前,我总是会在 HTML 页面上显示唯一一个按钮“生成文件夹列表”。
我想使用网络应用程序,因为我计划与公司分享这个(如果有帮助的话,我们很小?),而且我们有很多人无法自己运行该脚本。也许如果这不起作用,我可以与每个人进行一次会话,然后我们一起手动运行它,但理想情况下,我只希望他们单击 URL,单击“生成文件夹列表”按钮,然后获取我们需要从每个人那里获取数据。如果这是我唯一可以采取的路线,或者如果还有什么我应该尝试的,那么请开火!
下面是我使用的脚本:
function doGet() {
// This function is required for web app deployment.
// It will return an HTML page with a link to trigger the listMyFolders function.
var html = "<html><body><a href='/listFolders'>Generate Folder List</a></body></html>";
return HtmlService.createHtmlOutput(html);
}
function listMyFolders() {
var rootFolder = DriveApp.getRootFolder();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.clear(); // Clear existing data (optional)
sheet.appendRow(["Folder Name", "Owner Email", "Folder Link"]); // Headers
function processFolder(folder) {
var subfolders = folder.getFolders();
while (subfolders.hasNext()) {
var subfolder = subfolders.next();
var row = [
subfolder.getName(),
subfolder.getOwner().getEmail(),
subfolder.getUrl()
];
sheet.appendRow(row);
processFolder(subfolder); // Recurse into subfolders
}
}
processFolder(rootFolder);
}
由于 Copilot 给了我代码,我只是问他们如何解决这个问题。我基本上尝试过:
1。多个登录帐户
2。检查网络应用程序 URL:
3.权限和范围
4。检查脚本错误
5。检查浏览器控制台
6。重新创建 Web 应用程序
7。在线查看解决方案
这有效:
function listMyFolders() {
const fldr = DriveApp.getRootFolder();
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet0");
var arr = [["Folder Name", "Owner Email", "Folder Id","Parent"],[fldr.getName(),fldr.getOwner().getEmail(),fldr.getId(),fldr.getParents().next().getName()]];
PropertiesService.getScriptProperties().setProperty("list",JSON.stringify(arr));
processFolder(fldr);
Logger.log(PropertiesService.getScriptProperties().getProperty("list").replace(/],/g,'],\n'));
}
function processFolder(folder) {
var arr = JSON.parse(PropertiesService.getScriptProperties().getProperty("list"));
var subfolders = folder.getFolders();
while (subfolders.hasNext()) {
var sfldr = subfolders.next();
arr.push([sfldr.getName(),sfldr.getOwner().getEmail(),sfldr.getId(),sfldr.getParents().next().getName()]);
PropertiesService.getScriptProperties().setProperty("list",JSON.stringify(arr));
processFolder(sfldr);
}
}
我刚刚使用 PropertiesService 将文件夹存储在二维数组中。