从 Google 驱动器的不同文件中的单个单元格获取数据

Getting data from a single cell in different files from Google Drive

我有一个代码可以从 Google 驱动器上的不同文件夹中提取我所有的电子表格文件,并将它们列在电子表格中。 我希望此代码也将数据写入电子表格中写入的每个文件的单元格 U7 中。我试过这个

var 文件 = fold.getFilesByType(MimeType.GOOGLE_SHEETS); var comentario = files.SpreadsheetApp.getSheetByName("FICHA").getRange("U7").getValue();

(参见 var commentario)但是当我 运行 它时,我在第 12 行收到错误,类型错误:“无法读取未定义的 属性 “0”。(参见 [1] 和 [ 2]附在下面) 我有 运行 没有 var commentario 的代码,在那种情况下它 运行 很顺利,我没有收到任何错误,所以我真的不明白发生了什么。

如果有人知道我可以如何修改我的代码以便让它为 Comentarios 列中的每个文件写入 U7,那就太好了。 非常感谢您!

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var carpetasSheet = ss.getSheetByName("carpetas");
  var lista_carpetas = carpetasSheet.getRange("A2:A" + carpetasSheet.getLastRow()).getValues();
  var lista_carpetas_ok = lista_carpetas.filter(([a]) => a);
  var sheet = ss.getSheetByName("data");
  sheet.clear();
  ss.appendRow(["Parent Folder","Folder", "Name", "Update","URL", "Comentarios"]);
  

 for (var i = 0; i < 5; i++) {
    console.log(lista_carpetas_ok[i][0]) // Here, you can see the folder ID in the log.
    var folderid = lista_carpetas_ok[i][0];
  try {
    var parentFolder =DriveApp.getFolderById(folderid);
    listFiles(parentFolder,parentFolder.getName())
    listSubFolders(parentFolder,parentFolder.getName());
  } catch (e) {
    Logger.log(e.toString());
  }
}
function listSubFolders(parentFolder,parent) {
  var childFolders = parentFolder.getFolders();
  while (childFolders.hasNext()) {
    var childFolder = childFolders.next();
    Logger.log("Fold : " + childFolder.getName());
    listFiles(childFolder,parent)
    listSubFolders(childFolder,parent + "|" + childFolder.getName());
  }
}

function listFiles(fold,parent){
  var data = [];
  var files = fold.getFilesByType(MimeType.GOOGLE_SHEETS);
  var comentario = files.SpreadsheetApp.getSheetByName("FICHA").getRange("U7").getValue();
  while (files.hasNext()) {
    var file = files.next();
    data = [ 
      
      parent,
      fold.getName(),
      file.getName(),
      file.getLastUpdated(),
      file.getUrl(),
      comentario,
      ];
    ss.appendRow(data);
  }
}
}```


  [1]: https://i.stack.imgur.com/3ksfP.png
  [2]: https://i.stack.imgur.com/wDO8B.png

问题 1 的答案

你的第一个问题如下。

but when I run it I get an error on line 12, typeerror: "cannot read property "0" of undefined. (see [1] and [2] attached below) I have run the code without the var comentario and in that case it runs smoothly and I don't get any errors, so I don't really understand what is happening.

根据您的脚本,我认为您的 cannot read property "0" of undefined. 问题可能是由于 for (var i = 0; i < 5; i++)。因为比如当lista_carpetas_ok的数组长度小于5时,就会出现这样的错误。例如lista_carpetas_ok的长度大于5时,不会出现错误。

如果去掉这个issue,下面的修改怎么样?

发件人:

for (var i = 0; i < 5; i++) {

收件人:

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

问题 2 的答案

你的第二个问题如下

If anybody knows how I can modify my code in order to have it write U7 for every file in the Comentarios column, that would be great.

从你的脚本来看,我认为在函数listFiles中,var comentario = files.SpreadsheetApp.getSheetByName("FICHA").getRange("U7").getValue();这一行需要修改。因为在您的脚本中,files 是 fileIterator。所以在这种情况下,会出现错误。这个错误修改后变成如下

发件人:

var files = fold.getFilesByType(MimeType.GOOGLE_SHEETS);
var comentario = files.SpreadsheetApp.getSheetByName("FICHA").getRange("U7").getValue();
while (files.hasNext()) {
  var file = files.next();

收件人:

var files = fold.getFilesByType(MimeType.GOOGLE_SHEETS);
while (files.hasNext()) {
  var file = files.next();
  var comentario = SpreadsheetApp.open(file).getSheetByName("FICHA").getRange("U7").getValue();

参考: