从 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();
参考:
我有一个代码可以从 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();