無論是個人還是工作上,我都大量使用 Google 的各種服務,曾經遇過需要將 Google Drive 上的檔案依照某些架構規則存放,或是最近公司政策調整,導致某些重要檔案需要另外 dump 到公司內部 NAS 系統儲存。
這類需要大量批次處理的工作,就很適合使用 Google 開放給開發人員的 Apps Script 來處理。
因為 NAS 系統無法直接存放 Google 內生的各種檔案格式(Sheet, Doc, etc.),這裡示範一個批次將 Google Drive 中的 Google Sheet 轉為 excel 檔的範例程式碼:
function myFunction() { var rootFolder = DriveApp.getFolderById("1GkTn0BLCZAajEeBAU5XhfEt_VDWuXhjx"); //change root folder ID here convert(masterClientFolder); }
因為此腳本會基於一個根目錄,將該目錄下所有的子目錄中的檔案都進行檢查並轉檔,上方程式中需要提供根目錄的 ID。
function convert(folder) { var files = folder.getFilesByType("application/vnd.google-apps.spreadsheet"); while (files.hasNext()) { var file = files.next(); var ssID = file.getId(); var name = file.getName(); //original file name Logger.log(ssID); var url = "https://docs.google.com/spreadsheets/d/"+ssID+"/export?format=xlsx"; var params = {method:"GET", headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}}; var response = UrlFetchApp.fetch(url, params); // save to drive var myfile = folder.createFile(response); //create .xlsx file myfile.setName(name); //set .xlsx with original name } //iterate through all subfolders and convert var subfolders = folder.getFolders(); while (subfolders.hasNext()) { convert(subfolders.next()); } }
執行完成後,會在原本目錄的位置產生對應同檔名的 xlsx 檔,原始 sheet 檔仍會保留。類似的做法應也能套用到 doc -> word/pdf 檔的輸出上。