2007年1月17日 星期三

用PHP匯出Excel可以讀取的CSV

基本上這件事情有點小複雜,小弟盡量長話短說,因為我餓了,而且還有三個功能沒寫完....

起因於tgre的報名系統需要能夠匯出東西來,而且需要簡單的格式所以我選擇CSV格式,不過匯出後發現Excel 2002與OpenOffice.org(以下簡稱ooo)都無法順利用預設值讀取該檔案,於是找了一下資料(註1)發現是BOM的問題,所以我把程式加上輸出UTF-8 BOM的標記這樣ooo就可以順利開啟檔案不過Excel依然無解,後來小風發現如果把文件存成UTF-16的LE模式(註2)就可以讓Excel開啟,不過要怎麼從UTF-8轉UTF-16呢,小風貼給我一個PHP類別(註3),於是我試了一下可以轉成UTF-16,不過只有BE模式,而UTF-16的字串長度是固定的,所以就多寫幾行把UTF-16BE的模式轉成LE模式,以為這樣就結束了嗎,雖然LE模式可以讓Excel辨識,不過在解析雙引號和逗號之間有些問題,這個部分測試多次無解,最後小風提出如果不使用雙引號和逗號改用tab來分割一切就正常了,於是我就把程式改成這個樣子,不過有個小問題,ooo無法自動判斷tab分割,需要再匯入的時候勾選使用"定位鍵"

註1
http://blog.roodo.com/rocksaying/archives/1096340.html

註2
http://forum.palmislife.com/viewthread.php?action=printable&tid=46163

註3
http://mike.teczno.com/JSON/JSON.phps