批次將 Google Drive 中的 sheet 轉為 excel 檔

無論是個人還是工作上,我都大量使用 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 檔的輸出上。

 

用 Excel自動擷取網頁資料(下)

這篇來介紹如何一次爬多個類似的網頁,並儲存到不同的工作表中。簡單來說,就是使用 Excel VBA 製作一個迴圈,來重覆執行在用 Excel自動擷取網頁資料(上)說明過的方法。在這邊一樣沒有需要另外建置環境的問題,但需要撰寫簡單的 for loop 程式。

這次以台灣銀行的歷史牌告匯率為例,假使我們想要一次抓下多個幣別的歷史匯率並存入 Excel 表中,就適合使用這個方法。

12

繼續閱讀

用 Excel自動擷取網頁資料(上)

不用寫程式就能做到的網頁爬蟲

有天意外發現 Excel 可以用來擷取網頁資料,感覺還滿驚奇的。在許多沒有建置能撰寫其他程式的環境下,或是對不會寫程式的人而言,這實在不失為一個不錯又簡單的方法,只需要用到 Excel 就可以達成,並且截取下來的資料可以直接存成 xlsx 或是 csv 檔,若要進一步用其他程式或軟體進行分析也沒有問題。

台灣銀行的牌告匯率為例,我們能針對幾個我有興趣關注的幣別進行資料擷取:

01

要做出一模一樣的表格當然也可以用複製貼上辦到,但當這個任務是一個常態要進行的任務,例如每天要存取一次,那麼就有必要讓它自動化一點。用這個方式,我們還能讓他自動固定每小時或甚至每五分鐘更新資料。

繼續閱讀