Apps Script用Sheet做Logger

在Apps Script中比較困擾的就是如果執行正常的狀況下,Logger.log和console.log都不會顯示出來,所以就會用Sheet來當做Logger。 最精簡的方式就是寫下面這樣的一個doLog函數。

如何做Sheet的Log函數?


程式碼

function doLog() {
const sheetUrl = '填入你的Sheet網址';
let sheet = SpreadsheetApp.openByUrl(sheetUrl).getSheets()[0];
sheet.appendRow(Array.prototype.concat(new Date(), Array.from(arguments)));
}

如何運作的?

下面這個doLog函數會把呼叫當下的時間new Date()紀錄起來,並將你給他的所有參數Array.from(arguments)丟到sheet裡頭當作儲存格的內容

可以丟多少參數給doLog?

理論上受限於js的arguments可以接受的資料量,不過sheet的儲存格有100萬的限制,所以我們頂多就只能存100萬儲存格。

doLog的應用

在js裡頭我們常常會想要印出object物件的內容。

如果是要給人看的會希望是排版好好的JSON格式,而不是會去除空白跟換行的壓縮格式。

所以在丟給doLog之前,傳統會用 JSON.stringify(object) 產生字串再丟給log函數。

這裡建議在丟給doLog之前,使用JSON.stringify(object, null, '\t') 可以產生人眼可看的結果。


另外,要留意的是AppScript服務的物件往往只會印出空白字串,所以不建議丟進doLog函數



留言