顯示具有 Google-Apps-Script 標籤的文章。 顯示所有文章
顯示具有 Google-Apps-Script 標籤的文章。 顯示所有文章

Calendar Task

使用過大量的 todo app 後發現日曆對於我來說才是最重要的,對我自己來說工作上有公司的任務管理系統,所以剩下的只有時間管理,日曆本身就是最好的時間管理工具,但總不能把我幾點要做什麼都能通過畫上一段時間來處理,畢竟在公司除了會議以外,很少有明確時間(當然會以大多也無法準時),一項任務也無法保證能在確定的時間完成,這點也是為什麼 Todo app 與日曆僅能部分整合在一起,因此也讓我開始找尋更好的工具輔助;找工具前首先要明確需求,經過當前的狀況列出了幾點:

1. 最簡單的 Todo list (打勾就算完成)
2. 能與日曆整合
3. 有 Tag 或類似功能
4. 有搜索

從以上需求來看 Fantastical 已經能夠很好的滿足,並且我也使用了多年,但有個最痛苦的是用深了以後開始很亂,並且 Fantastical 沒有 Web、Android 版,這點讓一位 Web 愛用者很不舒服,後來開始找到了子彈筆記 Bullet Journal,有紙本、筆就可以完成,同時也有很多變種,Google 一下就可以搜到很多,在此就不介紹。

從子彈筆記開始讓我思考,如果這概念能夠與日曆結合確實能夠達成我要的需求,上述的幾點中除了 1 以外基本都可以完美支持,Tag 可以做為關鍵字搜索滿足,因此我定下了幾個簡單規則來讓日曆上也可以使用子彈筆記:

1. 一個 todo 一個全天事件
2. 開頭為未完成任務
3. >< 開頭為已完成任務
4. 使用 ! 表示優先級,P1  !!!   P2   !!  P3 

範例:
* > !! 201902月報  - 未完成 P2 任務
* >< !!! 201901月報 - 已完成 P1 任務

這樣做之後有幾個好處
1. 日曆就像是看板(Kanban) 一眼看過去就知道當週有哪些任務以及會議
2. 定期重複事件天然解決,如果有細節可以直接記錄在日曆事件上
3. 100% 跨平台,Web 版也有很棒的 Google calendar 可用
4. 周邊工具非常多,IFTTT, Google App Script, iOS 有 shortcuts 可以協助你做好各種自動化以及生成報表
5. 能夠解決公司數據安全問題,一般公司都有自己的日曆的服務

但這樣只能解決小、單一的任務,如果有長期的任務還是不好管理,這時候就會有兩種方式,如果是公司的事就直接使用公司的項目管理工具,個人我是使用 Bear 配合 Markdown 可以快速的整理出完整的計畫,當然這就可以看個人習慣。

如果有人對於 IFTTT, Google App Script, shortcuts 的應用細節有興趣歡迎直接聯繫我 :)

Google Apps Script - GMail Inline Image

最近剛好有需求要做Mail Parser,主要是需要把Mail附件拿來做些處理,Google Apps Script其實在這部份已經做的很棒,詳細可以查詢GmailApp,其中Inbox對於Gmail來說就像是個郵件盒,每個郵件盒中有很多的郵件(GmailMessage),每封郵件內可能還會夾帶著附件(GmailAttachment),相同一系列的郵件(就是一直Re: Fwd:)這些郵件會變為一個郵件串(GmailThread),你可以針對每一個郵件串(GmailThread)貼上標籤(GmailLabel)來分類,這就是在Google Apps Script中所分的幾個大分類。

  • GmailApp:Gmail
  • Inbox:Gmail 的Inbox
  • GmailThread:郵件串
  • GmailLabel:郵件串的標籤
  • GmailMessage:郵件
  • GmailAttachment:郵件附件

對於基本的GMail該有的功能幾乎是都有了,但對於Inline Image似乎沒有辦法取得,既不在Mail body也不在attachment中,但這圖片確實可以出現在Gmail中,從Mail Body只會取得一個連結,但這連結必須要Google login session才可以拿到,在Google apple script沒辦法直接用curl來login,所以開始了找尋新的一條路...最後發現在RawContent中其實有夾帶著Inline Image,是用base64 encode的binary,重點就是要把這些Parse出來decode轉成blob,就可以自由的使用,但在parse過程中遇到很多問題,現在的Mail server種類很多,Mail client更是多...每一個上傳過來的多少都有點落差,在這邊判斷這東西實在很麻煩,所以目前採用了一種方式解決,把所有收到的Email 再轉寄到另一個Gmail,這樣就可以保證收到的Mail全部都是Google 格式,也因此parse只要寫一種(GMail)即可。

如果有興趣使用可以直接Import,project key「MexeYVcutPEfH4PE_lTdUTQ1vcfzwSFZI

使用方式 sample
//只要使用下面這行就會回傳inline image的Array(blob array)
Mail.getGmailInlineAttachments(gmailMessage)


相關連結
source code - https://script.google.com/d/1S9W3czqvmbE20rXUMrZogPz3ij54CudfU7ugIVAKmTU0-U9Nw2k4xNFH/edit
Google Apps Script Gmail - https://developers.google.com/apps-script/service_gmail

Google Apps Script - SpreadSheet Library

前一篇有講過Google Apps Script - SpreadSheet,在使用Google 提供的Library還是感覺有些常用的東西沒有,所以就自己寫了個Library把幾個常用的整理起來。加入Library的使用方式如下:

Project Key「MDu1zmJTs8tZwFGuAKerzvA1vcfzwSFZI

Step1. Resource >> Manage libraries



Step2. 輸入Project Key「MDu1zmJTs8tZwFGuAKerzvA1vcfzwSFZI
成功Input後可以選擇所需要的版本、觀看文件,以及此Library在自己的Project中代表的變數名稱



Step3. Save

完成後就可以直接來使用,開始呼叫任何一個function前記得要先呼叫「initWithSpreadsheetId」,先把Id設定好後所有的function才可以使用,Library列表如下
  • initWithSpreadsheetId:設定要存取哪一個SpreadSheet
  • getSheets:取得SpreadSheet內所有的Sheet
  • getSheet:取得SpreadSheet內取得指定的的Sheet
  • getColumn:取得Sheet內一整欄的資料
  • getColumnIndex:取得Sheet內第一欄的文字位置
  • getRow:取得Sheet內一整行的資料
  • getAllRows:取得Sheet內所有的資料

Project Key「MDu1zmJTs8tZwFGuAKerzvA1vcfzwSFZI

相關連結
Google Apps Script - https://developers.google.com/apps-script/
Google Apps Script SpreadSheet - https://developers.google.com/apps-script/class_spreadsheetapp