以下代碼非常適合獲取檔案夾串列,但我找不到將子檔案夾提升到 3 個級別的方法。
誰能建議如何實作?
function generateFolderIndex(id) {
var folder = DriveApp.getFolderById('[ID]');
var subFolders = folder.getFolders();
var childFolders = subFolders
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Projekt');
sheet.clear();
sheet.appendRow(["Projekt", "L?nk", "Skapad"]);
while (subFolders.hasNext())
{
var childFolder = childFolders.next();
var folderID = childFolder.getId();
var name = childFolder.getName()
var link = childFolder.getUrl()
var date = childFolder.getDateCreated()
data = [name, link, date, ]
sheet.appendRow(data);
}
};
uj5u.com熱心網友回復:
如果您最多需要 3 個級別,并且只需要您在問題中提到的指定結構的資料。
試試這個怎么樣:
function generateFolderIndex(id)
{
var folder = DriveApp.getFolderById('[ID]'); //replace it with parent folder
var subFolders = folder.getFolders();
var childFolders = subFolders
var ss = SpreadsheetApp.openById('Projekt')
var sheet = ss.getSheetByName('_cache_');
sheet.clear();
sheet.appendRow(["Projekt", "L?nk", "Skapad"]);
while (subFolders.hasNext())// level1
{
var childFolder = childFolders.next();
var folderID = childFolder.getId();
var name = childFolder.getName()
var link = childFolder.getUrl()
var date = childFolder.getDateCreated()
data = [name, link, date]
sheet.appendRow(data);
var folder = DriveApp.getFolderById(folderID);
var level2 = folder.getFolders()
var levelChild = level2
while (level2.hasNext()) // level 2
{
var childFolder = levelChild.next();
var folderID = childFolder.getId();
var name = childFolder.getName()
var link = childFolder.getUrl()
var date = childFolder.getDateCreated()
data = [name, link, date]
sheet.appendRow(data);
var folder = DriveApp.getFolderById(folderID);
var level3 = folder.getFolders()
var levelChild = level3
while (level3.hasNext()) // level 3
{
var childFolder = levelChild.next();
var folderID = childFolder.getId();
var name = childFolder.getName()
var link = childFolder.getUrl()
var date = childFolder.getDateCreated()
data = [name, link, date]
sheet.appendRow(data);
}
}
}
}
uj5u.com熱心網友回復:
我相信你的目標如下。
- 您想使用 Google Apps 腳本檢索包含第 3 級子檔案夾的檔案夾串列。
在這種情況下,如何進行以下修改?
我認為appendRow在回圈中使用時,程序成本會變高。參考所以,在這個答案中,也包括了對這個問題的修改。
修改后的腳本:
function getData(folder, n = 4, res = []) {
if (n != 4) res.push([folder.getName(), folder.getUrl(), folder.getDateCreated()]);
if (--n == 0) return;
const subfolders = folder.getFolders();
while (subfolders.hasNext()) getData(subfolders.next(), n, res);
return res;
}
function generateFolderIndex(id = '[ID]') {
const folder = DriveApp.getFolderById(id);
const values = [["Projekt", "L?nk", "Skapad"], ...getData(folder)];
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Projekt');
sheet.clear();
sheet.getRange(1, 1, values.length, values[0].length).setValues(values);
}
在您的腳本中,可能不會使用
idoffunction generateFolderIndex(id) {。所以這個修改使用id. 當你使用這個腳本時,請設定'[ID]'或給出它作為引數。在這個修改后的腳本中,當
n = 4被改變時,你可以改變你想要檢索的級別。n = 4表示包含頂層檔案夾的級別。因此,例如,如果您要檢索頂層檔案夾下的 2 個級別,請將其修改為n = 3.
筆記:
- 此外,您可以使用 Google Apps 腳本庫 ( FilesApp ) 來檢索特定檔案夾下的檔案串列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/402613.html
標籤:
