如何将 Google 驱动器文件详细信息放入电子表格

How to get Google Drive file details into spreadsheet

我想从 Google 驱动器获取文件详细信息,并将它们存储在 Google 电子表格中。 我找到了这段代码,但它给出了一个错误:

Cannot find function next in object Files. (line 2, file "Code")

代码来自 this blog, possibly evolved from this gist.

/**
 * List all files in Google Drive folder.
 *
 * http://ctrlq.org/code/19854-list-files-in-google-drive-folder
 * https://gist.github.com/hubgit/3755293
 */
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);

  }

};

你可以改变这个:

function listFilesInFolder(folderName) {

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

为此:

function listFilesInFolder() {

  var folderName = "type your folder name here between the quotes";
  var folder = DriveApp.getFoldersByName(folderName).next();

显然,您是 运行 代码,因此 "hard code" 通过键入 您的 文件夹的文件夹名称名称进入声明。

正如 Sandy 的回答所指出的,您收到的错误消息是因为 DriveApp.getFoldersByName(folderName) 没有找到文件夹对象。

但是,您仍然会遇到问题,因为当 FilesList 被弃用时,您引用的脚本仅部分转换为使用 DriveApp。

  • 它把folder.getFiles()的结果当作一个数组,而实际上它是一个迭代器。

  • DriveApp 文件没有 getFileType() 方法,相反它们支持 getMimeType(),并且有一个 MimeType enumerator 可以与之比较。

  • 该代码中的下载 URL 不再有效。您可以从 Advanced Drive API 导出 link - 我刚刚注释掉了有问题的代码。

代码

此代码的更完整版本可在 this gist 中找到。

/**
 * List all files in Google Drive folder.
 *
 * @param {string} folderName    (optional) Name of folder on Google Drive
 *
 * Adapted from:
 * http://ctrlq.org/code/19854-list-files-in-google-drive-folder
 * https://gist.github.com/hubgit/3755293
 */
function listFilesInFolder(folderName) {
  // If we have not been provided a folderName, assume we will interact with user.
  var interactive = (typeof folderName === 'undefined');

  // Get name of folder to list
  if (interactive) {
    folderName = Browser.inputBox("List files in folder", "Enter folder name", Browser.Buttons.OK_CANCEL);
  }

  if (folderName === '') return;  // No name provided, exit quietly

  var folders = DriveApp.getFoldersByName(folderName);
  if (!folders.hasNext()) {
    if (interactive) Browser.msgBox("Folder not found.");
    return;
  }
  var folder = folders.next();
  var contents = folder.getFiles();

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

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

  // Loop over files in folder, using file iterator
  while (contents.hasNext()) {
    file = contents.next();

    if (file.getMimeType() == MimeType.GOOGLE_SHEETS) { // "SPREADSHEET"
      // Skip displaying spreadsheets - I don't know why...
      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(),
      niceFileType( file.getMimeType() )
    ];

    sheet.appendRow(data);

  }
}

niceFileType 辅助函数

/**
 * Get nice, readable file type matching given MimeType. 
 * Refer to https://developers.google.com/apps-script/reference/base/mime-type
 *
 * @param {string} mimeType  File type to match
 *
 * @return {string}          "UNKNOWN" or matched file type.
 */
function niceFileType( mimeType ) {

  // Supported file types stored in global fileType object for fast lookups.
  if (typeof this.fileType === 'undefined') {
    // Initialize global fileType object first time only.
    this.fileType = {};
    // ...
    this.fileType[MimeType.FOLDER] = "Folder";
    // ...
    this.fileType[MimeType.GOOGLE_APPS_SCRIPT] = "Google Apps Script";
    this.fileType[MimeType.GOOGLE_DOCS] = "Google Doc";
    this.fileType[MimeType.GOOGLE_DRAWINGS] = "Google Drawing";
    this.fileType[MimeType.GOOGLE_FORMS] = "Google Form";
    this.fileType[MimeType.GOOGLE_SHEETS] = "Google Sheet";
    // ...
  }

  // If we know the given filetype, return its name.
  return (this.fileType.hasOwnProperty(mimeType)) ? this.fileType[mimeType] : "UNKNOWN";
}