显示文件夹中的文件不起作用

时间:2015-05-11 11:11:35

标签: google-apps-script

我收到了错误'" DocsList"没有定义。'我的脚本工作正常,直到' DocsList'被禁用了。我在网上找到了解决这个问题的可能方案,并发现我必须更改“DocsList'到' DriveApp'为了我的脚本工作。但是,没有信息被弹出。我不知道出了什么问题。有什么帮助吗?

原始版本:

function ShowFilesInFolder() {
var files = DocsList.getFolderById(id).getFolders();

// Get the active spreadsheet and the active sheet
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();

// Set up the spreadsheet to display the results
var headers = [["Folder Name", "Owner", "URL"]];
sheet.clear();
sheet.getRange("A1:C1").setValues(headers);


// Loop through the results and display the file name, file type, and URL
for (var i = 0; i < files.length; i++) {
sheet.getRange(i+2, 1, 1, 1).setValue(files[i].getName());
sheet.getRange(i+2, 2, 1, 1).setValue(files[i].getOwner());

sheet.getRange(i+2, 3, 1, 1).setValue('https://drive.google.com/?tab=mo&authuser=0#folders/' + files[i].getId());
  }
}

修订版:

   function ShowFilesInFolder() {
   var folder = DriveApp.getFoldersByName(name);
   var files = DriveApp.getFolders();

// Get the active spreadsheet and the active sheet
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getActiveSheet();

// Set up the spreadsheet to display the results
   var headers = [["Folder Name", "Owner", "URL"]];
   sheet.clear();
   sheet.getRange("A1:C1").setValues(headers);


// Loop through the results and display the file name, file type, and URL
   for (var i = 0; i < files.length; i++) {
   sheet.getRange(i+2, 1, 1, 1).setValue(files[i].getName());
   sheet.getRange(i+2, 2, 1, 1).setValue(files[i].getOwner());

   sheet.getRange(i+2, 3, 1, 1).setValue('https://drive.google.com/drive/u/0/my-drive' + files[i].getId());
  }
 }

3 个答案:

答案 0 :(得分:0)

DriveApp.getFolders();不会返回一个数组,而是一个名为Folder Iterator的GAS类,文档很短但只需要你。

BTW,为什么变量会包含名为files的文件夹?

您的代码效率非常低,请花点时间阅读Best Practices,了解如何拨打一个电话来编写所有值。

答案 1 :(得分:0)

DocsList已被弃用,您应该将其替换为:

  var files = DriveApp.getFilesByName([FILENAME]);
  while (files.hasNext()) {
    var data = files.next().getBlob().getDataAsString()
 }

  var folder = DriveApp.getFolderById(id).getFolders();
  while (folder.hasNext()) {
    var x = folder.next()....
  }

...你已经得到了照片,祝你好运

答案 2 :(得分:0)

你没有从DriveApp .getFolders()获得一个数组,而是一个迭代器。只要仍有内容要处理,就可以快速将其映射到while循环内的数组或对象。

while (folders.hasNext()) {
  folder = folders.next();
  // do stuff with folder
}

将此文件夹与处理文件夹列表放在一个二维数组中,以便更有效地使用SpreadsheetApp,这可能会导致对您的代码进行以下修订。

function ShowSubfolders(name) {
  var parentFolder = DriveApp.getFoldersByName(name),
      folders = DriveApp.getFolders(),
      foldersArray = [],
      folder,
      ss = SpreadsheetApp.getActiveSpreadsheet(),
      sheet = ss.getActiveSheet(),
      headers = [["Folder Name", "Owner", "URL"]],
      values = [];

  while (folders.hasNext()) {
    folder = folders.next();
    foldersArray.push({name: folder.getName(), owner: folder.getOwner(), id: folder.getId(), url: folder.getUrl()});
  }

  // map folderArray to sheet format 
  values = headers.concat(folderArray.map(function(f) { return [f.name, f.owner, f.id, f.url]; }));

  sheet.clear();  
  sheet.getRange(1,1,folderValues.length + 1, 4).setValues(values);
}

请注意,Google云端硬盘中的文件夹不一定与您习惯的一样,因为所有内容都是参考/别名,同一个文件夹可以同时在多个位置有效,即使您要查找的其他数据也是如此保持不变。