# 用Google Apps Script自動爬出雲端硬碟內特定資料夾檔案 ###### tags: `Google` `Apps Script` ## 1. 建立一個新的Google Sheets 在上方工具列點選[擴充功能]>[Apps Script]進入Apps Script的編輯畫面 ![](https://i.imgur.com/1lhHhDt.png) ## 2. 編輯Apps Scripts程式碼 將下方程式碼貼上 ```js= //取得當前Apps Script所在的google sheet let sheet = SpreadsheetApp.getActiveSheet(); //最上層資料夾ID,留空為搜尋整個雲端硬碟 let parentFolderId = ''; /** * 主程式進入點 */ function main() { //新增標題列(如果標題列已存在可註解這行) sheet.appendRow(['資料夾', '名稱', '類型', '連結網址', '擁有者']); //撈取最上層資料夾的檔案 if (parentFolderId == '') { getFiles(DriveApp.getRootFolder()); } else { getFiles(DriveApp.getFolderById(parentFolderId)); } //撈取子資料夾 getFolders(parentFolderId); } /** * 取得資料夾底下所有檔案 * @param folder 資料夾id * @param filter 檔案類型mimetype */ function getFiles(folder, filter = '') { var files; if (filter == '') { files = folder.getFiles(); } else { files = folder.getFilesByType(filter); } while (files.hasNext()) { var file = files.next(); var mimeType = file.getMimeType(); var url = file.getUrl(); var name = file.getName(); //如果檔案類型為捷徑要找出真實類型 if (mimeType == 'application/vnd.google-apps.shortcut') { var tFile = DriveApp.getFileById(file.getTargetId()); mimeType = tFile.getMimeType(); url = tFile.getUrl(); //如果真實類型為資料夾,再列出資料夾內檔案 if (mimeType == 'application/vnd.google-apps.folder') { mimeType = '資料夾'; getFolders(file.getTargetId()); } } else { mimeType = file.getMimeType(); } //取得檔案擁有者 var owner = file.getOwner().getEmail(); if (file.getTargetId() != null) { owner = DriveApp.getFileById(file.getTargetId()).getOwner().getEmail(); } sheet.appendRow([getParentFolder(file), name, mimeType, url, owner]); } } /** * 取得資料夾底下的所有資料夾 * @param tFolderID 目標資料夾id */ function getFolders(tFolderID = '') { var folderList; if (tFolderID.length > 0) { folderList = DriveApp.getFolderById(tFolderID).getFolders(); } else { folderList = DriveApp.getFolders(); } while (folderList.hasNext()) { var folder = folderList.next(); var folderName = getParentFolder(folder); var owner = folder.getOwner().getEmail(); sheet.appendRow([folderName, folder.getName(), '資料夾', folder.getUrl(), owner]); //找出其他子資料夾 if (folder.getFolders().hasNext()) { getFolders(folder.getId()); } //找出檔案清單 if (folder.getFiles().hasNext()) { getFiles(folder); } } } /** * 找出上層資料夾的名稱 * @param target 目標 */ function getParentFolder(target) { var pName = ''; var parents = target.getParents(); while (parents.hasNext()) { var parent = parents.next(); pName = parent.getName() + '\\' + pName; if (parent.getParents().hasNext()) { pName = getParentFolder(parent) + pName; } } return pName; } ``` ## 3. 執行Apps Scripts ![](https://i.imgur.com/jos6gC4.png) ## 4. 檢視成果 ![](https://i.imgur.com/gs36EMs.png) ## 參考資料 1. https://developers.google.com/apps-script/reference/drive/file 2. https://developers.google.com/apps-script/reference/base/mime-type