跳到主要內容

[Mac] Converting TapExpense reocrd to MacMoney by Automator

標題下得有點長,還真是不太好意思。由於我習慣使用兩款記帳軟體來處理個人帳務,一者是用 iPod 隨手記帳的 TapExpense 2(最近剛購買由接手團隊 Lazy Studio 製作的第二版),另外則是麥金塔上的 MacMoney。兩款都是相當好用的軟體,卻同樣沒有出雙平台的版本,因此我寫了個 Perl 語言的轉換器,好讓我能將 TapExpense的紀錄匯入 MacMoney 中。

任何一個方便的功能,往往都附帶一些條件,這就是彈性與便利性的取捨。例如你必須把 TapExpense的紀錄透過 Email 傳輸,再從 Email 複製記錄另存成為 input.csv,接著把input.csv 與轉換器 Core.pl 放在一起,最後透過終端機下指令,才能匯出MacMomey要的csv檔案(範例檔名為 Book.csv)。

perl Core.pl>Book.csv

由於記帳不是一天兩天的事情,每次都要做也挺麻煩,真希望能夠把 TapExpense 記錄檔扔進某個程式裡面就能夠自動產生 MacMoney 的匯入檔。今天把整個想法擬定一下,決定這就是個大概的流程。


構思流程

TapExpense → 存成任意文字檔 → 建立 Booking 資料夾 → 設定資料夾動作 → Automator → 將文字檔命名為 input.csv → 利用 AppleScript 下命令給 Terminal 在桌面產生 book.csv → 刪除扔進資料夾的文字檔 → 把 book.csv 匯入 MacMoney 即可。


改良版的 TapExpense2MacMoney 轉換器 - Core.pl下載
$file = 'input.csv';
open (F, $file) || die ("Could not open $file!");
while ($line = <F>)
{
($field1,$field2,$field3,$field4,$field5,$field6,$field7,$field8) = split ',', $line;
#分開各欄數值
$field3 =~ s/-//;
#取代負號
$result = "20$field1,$field4,$field5,$field3,$field8";
#補回西元成四位數
$result =~ s/20Date/Date/;
$result =~ s/?/,,/;
#取代標題誤植20
print $result;
}
close (F);


和先前不太一樣的部份在於我添加了一個奇怪形狀的問號,這是在 iPhone 中文輸入時可以打出來的符號,目的是讓我在記帳時,可以在備註欄位用「問號」來區隔購買項目與統一發票號碼,切割後會匯入到MacMoney的統一發票欄位中。老實說我還挺希望 TapExpense2 的團隊能夠增加統一發票的欄位,最近拿到一堆電子發票,購買時不輸入的話,事後整理也會很困難。


專屬的記帳資料夾

我這次會重新研究轉換器的想法,在於我不喜歡桌面上放著檔案,但每次都要在終端機輸入編碼的指令,把檔案放在桌面似乎是切換的最好方式,反正只需要輸入:
cd Desktop
這次我的想法是,將Mac的「檔案夾動作設定」功能發揮出來。當我扔一個新的檔案進去「記帳」資料夾時,檔案夾動作設定會自動將檔案重新命名為我要的「input.csv」,順便下達指令給終端機,把檔案直接存到桌面上讓我使用。

現在就讓我們建立一個資料夾,不妨就叫做「Booking」(簿記),當然你可以取任何喜歡的名字,為了讓程式運作順暢,我還是少用中文的好。有一點算破梗,如果你有使用 Hog Bay Software 推出的 PlainText ,另外還有使用 Dropbox 與你電腦同步的話,可以把「Booking」資料夾建在 Dropbox 的 PlainText 中,應該會不錯。

接著把 Core.pl 扔進 Booking 資料夾就算完成準備工作。


設定 Automator 動作



Automator 機器人之前使用過很多次,這邊我不妨再使用一次,機器人只需要執行兩項動作:重新命名、執行 ActionScript。動作很簡單,開啟 Automator,選擇建立 Folder Action,只需要透過簡單的拖曳就能夠拉出這兩個動作。

唯一要解釋的大概還是 AppleSctipt的部份,由於我對 AppleScript 不熟,只好用很土法煉鋼的方式。利用 Var1~Var3 三個變數,分別設定切換資料夾下指令要求轉檔刪除 input.csv

由於對終端機下命令實用的是 keystroke 指令,電腦會以打字的方式將指令逐字key進去,如果這時你的輸入法是中文輸入法,你就會看到一堆注音符號出現在終端機中,建議還是事先切換的好。

tell application "Finder" to get folder of (path to me) as Unicode text
set workingDir to POSIX path of result
set Var1 to "cd /Users/lifong/Documents/Booking"
set Var2 to "perl Core.pl>~/Desktop/book.csv"
set Var3 to "rm /Users/lifong/Documents/Booking/input.csv"
activate application "Terminal"
delay 0.2
tell application "System Events" to keystroke Var1
tell application "System Events" to keystroke return
delay 0.2
tell application "System Events" to keystroke Var2
tell application "System Events" to keystroke return
app "terminal" quit
try
do shell script Var3
end try


請將 /Users/lifong/Documents/Booking/ 替換成你的Booking 資料夾路徑

別忘了最上頭 "Folder Action recevies files and folders add to" 選擇你的 Booking 資料夾,儲存起來就行了。


實際跑一遍


你可以把 Booking 增加到 Finder 的側邊欄當中,開啟任意的文字編輯器,將 TapExpense 記錄儲存到 Booking 資料夾中,稍微等個兩三秒鐘就會見到終端機跳了出來,大約經過 0.5 秒的時間就會關閉(因為我有下 delay 0.2 指令),這時你應該可以看到 book.csv 出現在你的桌面上了。


哪裡破梗

還記得我事前說的嗎?整個記帳流程不光是下指令討厭,就連把帳務記錄從 TapExpense 寄到信箱再複製存成檔案也是個討厭的工作。剛巧 PlainText 這款文字編輯的App可以透過 Dropbox 同步,你能夠把帳務記錄直接貼到 PlainText ,等 Dropbox 同步時啟動資料夾動作設定,你就可以直接拿到 book.csv。

如果你有興趣,不妨用用看這個點子,稍微加以調整應該就會好用得很。

這個網誌中的熱門文章

浴室蓮蓬頭水量復活了!

狀況是這樣的,進入冬季之後開始感覺熱水器的水似乎越來越常忽冷忽熱,熱水洗不到兩分鐘馬上就變成冷水,由於狀況太過頻繁因此開始上網查查可能的原因有哪些。

熱水器進水量太多,熱水器來不及燒熱熱水器裝錯,大廈用裝成公寓用(水壓不同)水壓不穩,建議裝個加壓器蓮蓬頭卡到沙子水管內鈣化.....
個人相當偏向簡單容易的解決方法,所以調整了水塔的水量,也把蓮蓬頭打開來清了清,順便把櫻花牌熱水器的溫度調了又調都沒有明顯的改善效果。

這時讓我比較驚奇的事情發生了,因為數年前曾經發生不良的洗手臺可能因為熱脹冷縮的關係而發生爆裂的情況,因此我很久沒有使用洗手臺裝熱水來使用。但因為逼不得已,打開洗手臺開熱水使用,竟然發現熱水可以源源不絕地供應,這代表說從水塔到熱水器到浴室的運作都是正常的,那代表的是蓮蓬頭有問題!

蓮蓬頭多半有個旋扭,可以決定是由蓮蓬頭出水還是下方的水龍頭出水,兩邊的出水量都一樣小就代表進水的時候有問題。而這時我在 Mobile01 上頭找到了相同狀況的苦主,用了他的方法竟然一試見效。

先全開熱水
再用一字起子將制水塞(螺絲) 轉緊轉鬆 轉緊轉鬆 轉緊轉鬆
就看到一些砂狀污垢流出
熱水的水量就恢復正常
沒錯,就是拿一字起調整熱水管線下方的螺絲,順時鐘轉緊時,水量會變小;逆時鐘轉鬆時,水量會變大。重複幾次這樣的動作後,我終於看到我的蓮蓬頭有了正常的水量,原來是負責水量的螺絲因為長時間使用,空隙被一些鈣質給填滿,造成水量變小。

為什麼水量變小會影響到水溫呢?因為現在的熱水器都有防空燒裝置,當熱水水量過小的時候就會自動熄火,你需要把熱水關起來重新打開才會讓熱水器重新點火。當你的蓮蓬頭水量過小卻很熱時,你會降低熱水的水量並且提高冷水的水量,此時熱水溫度降低而熱水量低到某種程度的時候就會讓熱水器熄火,接著就是清涼的冷水從蓮蓬頭灑到你的身上,透清涼啊XD


插曲:

當我對蓮蓬頭完全失望時,拿著水盆猛從臉盆撈水沖澡的我,還真想買這款產品,可以將臉盆的水龍頭轉接到蓮蓬頭的工具,《面盆沐浴切換頭》,真是超吸引人的。



Ref
(己解決)浴缸水龍頭及蓮蓬頭純熱水是純冷水出水量的1/3, 是水龍頭內阻塞? 還是熱水水管阻塞? - Mobile01行動版 - http://goo.gl/NTBrl 面盆沐浴切換頭 、水龍頭及水管修理零件 | 水材/防水商品 - 特力屋 - http://goo.gl/uA…

合併多個 Excel 檔到一個工作表中

最近工作遇到一個問題,需要去檢驗近千個檔案的內容是否有問題。檢驗的方式雖然可以透過函數來判斷,但是上千個檔案量光是打開就覺得麻煩,覺得在驗證之前一定要把檔案想辦法合併起來。

巨集合併M Riza 先生提出一個很棒的方法,"Merge multiple excel files into a single spreadsheet (MS Excel 2007)"。

Step by Step開啟 Excel,按下 Alt + F11 叫出巨集編輯器,貼入網站中的 Code
修改第8行的路徑,改成需要合併的 Excel 檔存放路徑
按下執行鍵就 OK 了
心得儘管是 CSV 檔案也能正確合併。
這邊要注意一件事情,Code 當中的 A2 是起始的儲存格,在合併過程中會忽略掉標題列,直接從第二列開始複製;若是你想連標題列都合併起來,請改成 A1。IV 是他的複製欄寬,可以改成自己想要的欄寬。
Range("A2:IV" & Range("A65536").End(xlUp).Row).Copy
值得注意的是,雖然這個方法是給 Excel 2007 使用,但 Excel 2007 開始有個重大變化,就是 Excel 最大列數從 2^16 次方改成了 2^20 次方。這代表你可以處理的資料從 Excel 2003 的 65,536 筆增加至 1,048,576 筆。
心得第二點的發現是因為我合併了所有的檔案,還很慶幸原來只有六萬多筆,最後慚愧地發現原來資料數量有三十萬筆,而 Code 當中卻只設定到 65,536 筆,只需要把 A65536 改成 A1048576 即可。

2^4 代表的是16倍的資料處理量,過去 Excel 2003 只能處理六萬筆資料,如今拜軟體、處理器的提升,我們比起過去的人擁有更大的優勢來處理資料,感謝技術的進步。

JMC ExcelJeeShen Lee 李毅胜先生也寫了一個 Excel 巨集,"JMC Excel – Join, Merge, Combine multiple Excel sheets or Excel workbooks",畫面是我喜歡的簡潔類型,試用版可以一次合併 10 個檔案,如果你想要完整版的話可以寫信給作者花個 $7 購買他的檔案來使用看看。

不…

ASUS 主機板驅動全裝卻還有黃色驚嘆號?也許你少裝了這個…

今天重灌了一台電腦,主機板是 ASUS P9X79 WS ,照例上了 ASUS 的官網下載了相關的驅動程式安裝,因為原始的驅動程式光碟已經毀損無法使用。

等到全部安裝完,連 Windows 7 的更新結束後,裝置管理員內的部份硬體依然出現黃色驚嘆號( yellow exclamation mark ),這顯然代表我有什麼東西沒有裝到。

問題:安裝了所有驅動程式,還是有部份裝置沒被驅動SM匯流排控制器基本系統裝置( Base System Device ) x N 個
解決:你可能真的有東西沒裝到,例如…

我通常安裝的都是置頂的晶片組驅動程式,也就是使用綠色框框的 MEI 驅動程式,安裝完成之後也的確可以正常運作。

MEIIntel(R) Management Engine Interface
我再回頭到官網看一下,奇怪,為什麼舊版本的驅動程式反而容量大許多,新版只有59MB,舊版卻有 255MB。

好奇安裝了一下,黃色驚嘆號竟然全部消失了。該死,原來我一直少裝這款驅動程式。

ChipsetIntel(R) Chipset Software Installation Utility
如果你有相同問題,不妨回頭到官網,找一下 Chipset 驅動程式,就挑最容量大的那個吧!