我想在我的 google 驱动器和日志文件 ID、url 和所有者名称中搜索并列出以 "A3_" 开头的 google 传播 sheet 到另一个 google sheet
I want to search and list google spreadsheet that start with "A3_" in my google drive & log file id, url and owner name into another google sheet
我有这段代码,但这给出了无法读取 属性 'getName' of null 的错误
我该如何解决。我的驱动器上大约有 2000 个文件。还有其他用户共享的文件。
function getMyFilesFromDrive() {
var myFiles = DriveApp.searchFiles('title contains "A3_"');
var sheet = SpreadsheetApp.getActive().getSheetByName("Files");
sheet.clear();
var rows = [];
rows.push(["ID", "Name", "Url", "user"]);
while(myFiles.hasNext()) {
var file = myFiles.next();
if(file != null) {
rows.push([file.getId(), file.getName(), file.getUrl(), file.getOwner().getName()]);
}
}
sheet.getRange(1,1,rows.length,4).setValues(rows);
}
查找电子表格
这是我用的:
function getSpreadsheets() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Files');
if (sh.getLastRow() > 1) {
const rg = sh.getRange(2, 1, sh.getLastRow() - 1, sh.getLastColumn());
rg.clearContent();
SpreadsheetApp.flush();
}
var token = '';
var vA = [["Id", "MimeType", "Kind", "Title", "Path", "OwnerEmails"]];
do {
let resp = Drive.Files.list({ pageToken: token, q: "mimeType='application/vnd.google-apps.spreadsheet'" });
token = resp.nextPageToken;
for (let i = 0; i < resp.items.length; i++) {
let item = resp.items[i];
if (item.title.match(/^A3_.*$/)) {//with names that begin with A3_
vA.push([item.id, item.mimeType, item.kind, item.title, getPathFromId(item.id), item.owners.map(function (o) { return o.emailAddress }).join(',')]);
}
}
if (token == '') {
ss.toast('That was the last ' + resp.items.length + '. Your Done!');
} else {
ss.toast('Another ' + resp.items.length + '. Keep Going!');
}
} while (token)
sh.getRange(2, 1, vA.length, vA[0].length).setValues(vA);
SpreadsheetApp.flush();
}
function getPathFromId(id) {
try {
var file = DriveApp.getFileById(id)
var pA = [];
pA.push(file.getName());
var folder = file.getParents();
while (folder.hasNext()) {
var f = folder.next();
pA.push(f.getName());
folder = f.getParents()
}
var r = pA.reverse().join(' / ');
}
catch (e) {
return e;
}
return r;
}
您需要启用驱动器 API。
您可以将下载地址添加到这里
vA.push([item.id, item.mimeType, item.kind, item.title, getPathFromId(item.id), item.owners.map(function (o) { return o.emailAddress }).join(','),item.downloadUrl]);
和此处的 header:
var vA = [["Id", "MimeType", "Kind", "Title", "Path", "OwnerEmails","Url"]];
我有这段代码,但这给出了无法读取 属性 'getName' of null 的错误 我该如何解决。我的驱动器上大约有 2000 个文件。还有其他用户共享的文件。
function getMyFilesFromDrive() {
var myFiles = DriveApp.searchFiles('title contains "A3_"');
var sheet = SpreadsheetApp.getActive().getSheetByName("Files");
sheet.clear();
var rows = [];
rows.push(["ID", "Name", "Url", "user"]);
while(myFiles.hasNext()) {
var file = myFiles.next();
if(file != null) {
rows.push([file.getId(), file.getName(), file.getUrl(), file.getOwner().getName()]);
}
}
sheet.getRange(1,1,rows.length,4).setValues(rows);
}
查找电子表格
这是我用的:
function getSpreadsheets() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Files');
if (sh.getLastRow() > 1) {
const rg = sh.getRange(2, 1, sh.getLastRow() - 1, sh.getLastColumn());
rg.clearContent();
SpreadsheetApp.flush();
}
var token = '';
var vA = [["Id", "MimeType", "Kind", "Title", "Path", "OwnerEmails"]];
do {
let resp = Drive.Files.list({ pageToken: token, q: "mimeType='application/vnd.google-apps.spreadsheet'" });
token = resp.nextPageToken;
for (let i = 0; i < resp.items.length; i++) {
let item = resp.items[i];
if (item.title.match(/^A3_.*$/)) {//with names that begin with A3_
vA.push([item.id, item.mimeType, item.kind, item.title, getPathFromId(item.id), item.owners.map(function (o) { return o.emailAddress }).join(',')]);
}
}
if (token == '') {
ss.toast('That was the last ' + resp.items.length + '. Your Done!');
} else {
ss.toast('Another ' + resp.items.length + '. Keep Going!');
}
} while (token)
sh.getRange(2, 1, vA.length, vA[0].length).setValues(vA);
SpreadsheetApp.flush();
}
function getPathFromId(id) {
try {
var file = DriveApp.getFileById(id)
var pA = [];
pA.push(file.getName());
var folder = file.getParents();
while (folder.hasNext()) {
var f = folder.next();
pA.push(f.getName());
folder = f.getParents()
}
var r = pA.reverse().join(' / ');
}
catch (e) {
return e;
}
return r;
}
您需要启用驱动器 API。
您可以将下载地址添加到这里
vA.push([item.id, item.mimeType, item.kind, item.title, getPathFromId(item.id), item.owners.map(function (o) { return o.emailAddress }).join(','),item.downloadUrl]);
和此处的 header:
var vA = [["Id", "MimeType", "Kind", "Title", "Path", "OwnerEmails","Url"]];