脚本可以工作,但我收到此消息“抱歉,此时无法打开文件。请检查地址并重试。”每次都留言

问题描述 投票:0回答:1

警告:我的编程知识为 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:

  • 仔细检查我从管理部署 Web 应用程序部署程序复制的 url 是否正确(我真的不知道我是否做对了,但每次我进入新阶段时我都会非常仔细地查看该 URL - 总是HTML 部分失败。)

3.权限和范围

  • 另一件事我不知道,如果我检查正确的话,但如果它有帮助的话,我已经进行了两次部署(都不起作用);其中一个是“执行为:仅我”,另一个是“执行为:访问网络应用程序的用户”,这两个设置都设置为只有那些有权运行它的人才是我工作区中的任何人。

4。检查脚本错误

  • 另一个可能的问题,我当然不知道如何检查脚本错误。当我运行脚本时,它运行得很好,如果它有帮助,我尝试了调试按钮,但没有任何结果。所以可能是这个吗?

5。检查浏览器控制台

  • 如果我尝试这样做,我什至不知道要查找什么,但它告诉我按 F12 并查看此处的错误消息。这就是它最终的样子: 在此输入图片描述

6。重新创建 Web 应用程序

  • 这样做了,我制作的第二个电子表格给了我相同的结果。基本上,脚本可以运行,但网络应用程序不能运行。

7。在线查看解决方案

  • 我看到几年前的用户说他们花了一天左右的时间就可以打开文件,而其他人大多说这是一个多帐户问题,甚至是谷歌的一个错误(现已解决),但我还没有遇到与我的情况相关的任何事情,我尝试过隐身模式并注销我的帐户,但它仍然不起作用。或者更确切地说有,但没有人回答。
google-sheets google-apps-script
1个回答
0
投票

这有效:

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 将文件夹存储在二维数组中。

© www.soinside.com 2019 - 2024. All rights reserved.