【问题标题】:Google Script App list drive folder in SheetsGoogle Script App 在表格中列出驱动器文件夹
【发布时间】:2016-02-26 01:22:11
【问题描述】:

我正在尝试复制到步骤 https://ctrlq.org/code/19854-list-files-in-google-drive-folder

它成功地为工作表中的列制作了标题,但它没有获取/打印行中的任何数据。我哪里做错了?

这就是我所拥有的:

/* Code written by @hubgit 
   https://gist.github.com/hubgit/3755293
   Updated since DocsList is deprecated 
*/

function listFilesInFolder(folderName) {

  var folder = DriveApp.getFoldersByName(folderName).next();
  var contents = folder.getFiles();

  var file, data, sheet = SpreadsheetApp.getActiveSheet();
  sheet.clear();

  sheet.appendRow(["Name", "Date", "Size", "URL", "Download", "Description", "Type"]);

  for (var i = 0; i < contents.length; i++) {

    file = contents[i];

    if (file.getFileType() == "SPREADSHEET") {
      continue;
    }

    data = [ 
      file.getName(),
      file.getDateCreated(),
      file.getSize(),
      file.getUrl(),
      "https://docs.google.com/uc?export=download&confirm=no_antivirus&id=" + file.getId(),
      file.getDescription(),
      file.getFileType().toString()
    ];

    sheet.appendRow(data);

  }

};

【问题讨论】:

  • 您需要调试代码。 folderName 是否被 listFilesInFolder 函数接收?在函数的最顶部添加这行代码:Logger.log('folderName: ' + folderName);。运行代码,然后在 VIEW 菜单中选择 LOGS。日志中是否打印了正确的文件夹名称?
  • 谢谢@SandyGood。使用您添加的部分运行它时,我刚刚收到这个新错误。无法检索下一个对象:迭代器已到达末尾。 (第 8 行,...
  • 每次我尝试寻找新的解决方案时,都会出现新的错误。如果你使用 docList,它就会被贬值。如果我将任何脚本与 while(contents.hasNext()) { 一起使用,则会产生服务器错误。甚至谷歌参考的教程也已经过时了。 ;(
  • 我假设你从这一行得到错误:var folder = DriveApp.getFoldersByName(folderName).next(); 从末尾删除next(),这样你就只有:var folder = DriveApp.getFoldersByName(folderName); 然后在修改后的行之后添加Logger.log('folder: ' + folder);。检查日志。它应该显示一个文件夹迭代器或一个对象。如果没有找到具有该名称的文件夹,则 next() 将不起作用。没有“下一个”文件夹。
  • 要测试代码,您可以“硬编码”folder 的值: 添加一行:var folder = "my Folder Name Here"; 您也可以运行调试器。选择错误图标右侧下拉列表中的函数名称,单击第 10 行,以便在左侧的行号上显示一个红点。然后单击错误的图标。所有变量值及其值都将显示在窗口底部。然后,您可以通过单击大方块右侧的图标一次执行每一行。

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


【解决方案1】:

您需要根据需要定制代码。首先在ListFilesInFolder(folderName) 中没有传递任何内容,因此删除folderName 部分。然后尝试使用特定的文件夹名称。接下来,如果我们不想局限于电子表格。我们需要删除这些行:

if (file.getFileType() == "SPREADSHEET") {
      continue;
    } 

事实上,不需要for loop contents.hasNext() 就足够了。所以这个函数最终会是这样的。它正在工作。

function listFilesInFolder() {

  var folder = DriveApp.getFoldersByName('SRL').next();
  Logger.log(folder);
  var contents = folder.getFiles();
  Logger.log(contents);

  var file, data, sheet = SpreadsheetApp.getActiveSheet();
  sheet.clear();

  sheet.appendRow(["Name", "Date", "Size", "URL", "Download", "Description", "Type"]);


    if (contents.hasNext()) {

      file = contents.next();

      Logger.log(file);

      data = [ 
      file.getName(),
      file.getDateCreated(),
      file.getSize(),
      file.getUrl(),
      "https://docs.google.com/uc?export=download&confirm=no_antivirus&id=" + file.getId(),
      file.getDescription(),

    ];

    sheet.appendRow(data);


 }

};

【讨论】:

  • 不起作用...仅返回文件夹中找到的第一个文件
【解决方案2】:

如果您在其中硬编码文件夹 ID,则以下操作有效。

还有a deeper discussion here

function listFilesInFolder(folderName) {

   var sheet = SpreadsheetApp.getActiveSheet();
   sheet.appendRow(["Name", "Date", "Size", "URL", "Download", "Description", "Type"]);

    var folder = DriveApp.getFolderById("PUT_YOUR_FOLDERID_IN_HERE");
    //Logger.log(folder);
    var contents = folder.getFiles();

    var cnt = 0;
    var file;

    while (contents.hasNext()) {
        var file = contents.next();
        cnt++;

        Logger.log(file);
        Logger.log(cnt);

            data = [
                file.getName(),
                file.getDateCreated(),
                file.getSize(),
                file.getUrl(),
                "https://docs.google.com/uc?export=download&confirm=no_antivirus&id=" + file.getId(),
                file.getDescription(),
                file.getMimeType(),
            ];

            sheet.appendRow(data);



    };
};

【讨论】:

    猜你喜欢
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多