現在什麼都講求要搬上雲端,像 Google Docs、Office365 都是可供多人進行協同作業的線上服務。這些服務固然方便,只是功能性未必有本機端軟體完善。像是 Excel 的一些函數,是沒有辦法在 Google Docs 裡使用的;不過你自己寫函數的話,那就可以來試看看哩。
沒關係!即使是Excel,也有內建函數做不到的事,Excel可以靠VBA(Visual Basic for Application)來自訂函數,Google Doc一樣有Google Apps這個強大的引擎做後盾。只要你寫得出來,它就願意幫你算。
製作的方式很簡單。Google Docs的工具列表裡,自帶了一個「指令碼編輯器」。只要在裡頭建立指令碼,它就會呼叫Google Apps的運算資源來執行,加速Google Doc的工作進行。說穿了就是與VBA的功用相同,差別在於VBA是使用電腦本機的處理器來計算,Google Doc則是透過雲端引擎。
當然了,就像免費的雲端空間有限,用太多雲端運算也是要付費的。Google Apps會依帳戶等級而提供不等量的運算資源,比如大家都在用的免費帳戶,在固定時間內會有自訂函數的執行次數限制,這時候就只有靠函數最佳化來避免Google鎖你的雲端腦,或是付更多錢來增加Google機房處理器資源的使用權限了。
▲「SUMIFS」是用來過濾多重條件後再計算資料總合的函數,Google Doc不支援,那就自己寫吧。
自訂工作表函數只是Google Apps的分支機能。Google Apps Script的延展性很好,願意花點時間的話,要實作出類似本機端軟體的圖形化介面來修改整理工作表並不困難。但就自訂函數而言,使用範圍會有一定限制,它可以取得整個工作表的資料、甚至是跨檔案做計算,然而計算的結果只會出現在呼叫該函數的儲存格。舉個例子,如果在A1呼叫了某個函式來計算B1到B100的資料,那麼計算的結果一定只能回傳到A1,無法指定給其它儲存格。
為什麼呢?據Google表示這是基於安全性限制,從哪裡送出的請求就要從哪裡取回,免得造成其他儲存格的公式遞迴計算。更簡單的說,自訂函數所取回的資料是透過函式裡的「return」來傳回值,會寫程式的玩家應該都知道函數只能產生一個結果,並且傳回給指定的變數,不像副程式一樣可隨心所欲。在Google Docs裡,呼叫函數的儲存格就等於變數,函數計算完資料後本來就只能把值傳回給變數,這樣就不難理解了。
▲寫完後就能在公式列直接呼叫,跟一般內建函數的使用方法沒啥兩樣。
自訂函數能解決不少原本得組合好幾個內建公式才能達成的計算任務。但是就像前文提到的,免費版的服務難免有限制,如果工作表裡有太多儲存格需要使用到該自訂函數,那麼它的執行效率未必會比內建公式來得快。有時候呼叫太過頻繁,其至還會出錯,這就是Google Apps提醒你程式寫得不夠好,或是該付更多錢了。
換個角度看,微軟自家的 Office365 在關鍵公式上的支援倒是很齊全,Office軟體儲存的檔案格式回娘家後沒理由不相容。常常需要用到複雜Excel公式計算的玩家們,不妨也嘗試看看。
(本文作者:水母漂)