2010年5月27日 星期四

[Gem]實作spread sheet

每個工程師都會遇到的挑戰就是處理微軟派的資料(在這裡假設你不是用微軟的作業系統在寫程式,this is Ruby on Rails blog!:D) 我在需求名單下剛好就有客戶說要有由Excel檔匯資料入庫的功能,於是從roo一路尋找,直到找出spread sheet。但真正實作卻是這週才做好的。

因為本人有點IO恐懼症。看了老半天的RubyIO,實在是不想這樣慢慢磨。於是直接開一個Model用Paperclip處理檔案上傳的問題(因為也剛好有三種EXCEL表要處理,開一個Model還不算太浪費(藉口啊!))

檔案可以穩定上傳後(Paperclip教學請參見RaislCasts,非圖型檔案只要再放上檔案位址便能直接連結下載)。再來就能開始寫匯入了,參考官網的說明。簡單的說我要做的就是抓出我要的資料頁並指定從哪一行開始,再來行迴圈與陣列應用create 或update便可。


這是做好後的結論。在還沒做好前,我一直遇到can't dup NilClassundefined method `XXXX' for nil:NilClass等等的問題。

後來實驗出來的結論如下:官網的教學手冊一切都沒有錯,但是你的Excel要是有巨集或是自訂的選擇器可能會引爆炸彈(我被這個炸了好幾次,後來特別存了把auto filter都關掉的版本試、總之盡量讓你的Excel表陽春,至於如何讓客戶方便使用我還在研究);中文匯入一切沒問題、想避開空資料就自己過濾一下Nil也罷;你的日期只要格式看起來有點像、欄位會自動幫你轉好格式(但是如果填的是民國年次就要再自己加個11年,因為自動轉是幫你加上1900年lol);在炸程式時先確認是否自己的model都有下對(三種表格寫到亂的下場就是欄位一直看走眼,欄位名稱下錯當然也是死路一條...)

如果你不要做匯入的動作,直接開啟顯示在畫面也可以。總之切記迴避Nil insert,一切都平安。