Excel 使用 POI 讀取文字格式日期卻變成數字的問題

之前就有遇過類似的問題了,這次遇到的不太一樣,也用了很奇怪的處理方式,不知道正規怎麼處理,先記錄下來下次再遇到就知道怎麼處理了。

今天小蛙要用 POI 讀取的 Excel 遇到一個日期問題,以往要讀取的日期欄位格式大部份是固定的,如果是這種固定的狀況就可以直接用 TEXT 寫定或是讀取進來之後再做轉換,但這次要讀取的欄位裡有各式各樣的內容,因此沒辦法這樣處理。

問題

如下圖,要讀取的儲存格為「1990-03-17」,但實際內容是上面的 1990/3/17,而格式是「自訂」,所以實際內容是 1990/3/17,指示設定顯示為 1990-03-17,透過 POI 讀出來之後會變成 32949 …

b0ITDAeqTe1lz8vFh02Fsa5ql3IG2mOn1a4IlIzeo96n2YIMuXtnL IxSYlPhckAXB8IJzHl eYeTkMoegQfwA24NPGhiN3 IVMIu57sJ lvpzf49gLlvmU15 qP6ueiacx 2XWV6irSp9Qct90HrPPvEE2IWJKHNmppDEBWTNYAA4im BSfox fA8NNWIftFvT1FuIW0WJ9R9zWV6LhNqOneu 4J7JwJt6lKxoJhJ3VTbQDiA TDFeWrTaRujWGKXEjxQ7XvWJgAs9K8Ts HCiwGTpCtz2Xf94SPu9h4RYFwqPQOzrr8XEHIMam02394l9 J7WD 3BP7PNqnBr4rdmk7CO5bk6MH5zMyGCjDeGXdJEvt48trk3cutt5p1o8bLXuWpbQe7zNd5X0RfSSsQLik1BWBH3rznnvS94GiBWzkN56RVjz4Fz1BmFjqTYHnTcsUcukBJqsUUJPzTeMBsQXaR0WVUL1tTlnvheIRMedCXvUDRYVY 15DApGxzDfw8PSwDtLtDopJd6ZtGg4OsQnUxzltj1CDtUe7q0 HONSVP6WObeYuo hATtWGrTecSr4IZTo3Exo2RsYHmkR2P0tDF 7eskunoGbcEeZOlkN0lbA4gM9wysLt13xlUUcSYvNZ8v36YEchajYrUktcsiVbEq32XusC5oGW7DgckbJwHZ7Sx42ghDZ9ImzfbwJHsoNGM5Idr8ygv07MuDjmk8Fa0qK9JSoLEtlf6g7cq5m74lP=w168 h120 no Excel 使用 POI 讀取文字格式日期卻變成數字的問題

如果把儲存格的格式直接設定成「文字」,然後儲存格就直接變成 32949 了 …

小蛙處理方式

如果你的 excel 真的太大,幾百萬幾千萬筆那種,還是看有沒有大大願意幫忙,小蛙這次要處理的只有幾千筆。試過很多做法最後都會變成 32949,先說如果你的儲存格內容很一致,Converting Number representation of Date in excel to Date in java如何在Excel中將日期轉換為數字字符串或文本格式? 可能都可以幫上忙,只是看要從程式端處理還是從來源資料端處理。

因為內容不固定,用上面的方式轉出來又會延伸出其他問題,小蛙就想真正要做的事情其實是

把所見的文字格式撈出來,而非實際資料

複製要處理的日期儲存格,貼上筆記本後再複製

有時候複製了有格式的東西,要去除這些格式除了用「以純文字方式貼上」之外,還有一個方法就是,先貼去 Windows 內建的筆記本,一定要筆記本喔,有些文字編輯器即使你複製過去再複製出來,格式還是保留著的,Windows 內建最傳統的筆記本不支援格式,因此複製進去就會剩下純文字,再複製出來就只剩下純文字了。

將 excel 要貼上的儲存格設定為「文字」

如果把上一部複製的資料貼回原本的 excel 儲存格中,還是會跟一開始一樣,要貼回之前先把儲存格設定成「文字」

貼上

貼上之後再從 POI 讀取就可以讀到真正我們在 excel 中看到的內容了。

KFyzURE9MouVkIStM8gJQfC3QVXMlDP7h0t5NoGRMQ kfqz1bhWfsCuWy pRYwzF FP9NeLRx8thinO FhB9UrRXt0Q opGixwnAokOk97oqOzl DdtSwHAm RgkqMo6W8vqELvPq4olCIQg I7F0vkumOiSleImQzfYg4M9f1Im5d1Lza8tAcF5RVMFxoCloB3G76wLPL p38eSnUnT fnzHn 64k8Zv71FYYeKl5MjjVNpwComjuuF7k4m9o0jm56TywX4Hls 74nCNqu84o1TtLJ8yY8E V3 VWKABFxNiX2r4N6aEhfc2mId4I3aOsmQsn5qQ x q54BIOnYLsvhya 0Sz1K8YpdNZGHySYfIDocAs9kwD50u9bsdxkNFIup A x Pqz17OKiQZbSuH4RfcBkSadw 1vEXSIhdARYZkDI3RgxYCIigeO44GKrBkbAp9nrhfX8mLuDCaBv6rMEx kHE70AHSiD851DcScsh0i0yy329E8MNNRSKSHQjZFxHJlqyV55eebW0LPwX GG3WSWszsvNs2Zz3zXJvWAuu0lR58kaojxSDhnmA 2MKgimTessdIowOZqzUXlpw0AAweT muKgFvlbsAh2IHR6jqrgW JUulD 7mUoS8Lkv7UFVCI usF14xrloOYL3zM2UQ2630yIVV4nAvHuEWhIS6tNiyj3K4YN8ANzgtboDsayIKLwwlHDxYW7Zqg0y1vJ0mIhrfB5jJh8J9 fqbQd7P=w557 h281 no Excel 使用 POI 讀取文字格式日期卻變成數字的問題
原本 excel 自動補成「自訂」
AJzrjXk1aETjwQgrLgByKaUgVnjmige5rbiafsD5i6rwvk9yuKNKPtdhcLQmU9T DiKdlen4h4md0ZQh79jo bVIgWvwkhhpHRTTPecOv5z3 IreTrI1lkRtxDU v5gpzS6QdVe6H43FxKMWaV9Wk0lc4 lap6lURlyu GRDUK58ZPOeX10He96HrrIphSsYKWnqAZC6hf11f rdqkCj7sFxqzgJOi8DX6RbqaWmQf1L3JA Xg8O cDkJfAa xQKo1M1XQmLlpajZfcMNYkSUOMqlfIun5InY0N3BxCQQJbbVMAsoU2iHUAhb2rqHYLLeC9MDGEuAEHHHVPXlL AG4s2ibKfUZZfF5O5g9ZgL3LqViWZ awp7XtQj1ebywviRwgG6EMPz1hBlNfY1xnnP shswL90v2Vrn7TboV84W8 4w5NcdR Tpc sXlpNgM6XAEV5HZ0oS4C2lWAnpNZyTexOLG3K2YqGd6 t2nSfhd1eRD5Df4bXrCxh5AE08xZ0ptYSTeadQ9b6mgF1ERz6R4rWH2V9XY5 yT6l9plzdsAlwrogHjWeJBsHFwceM4lHZ6e409IyU0GIqUVHUPWT b5jaolIwlv QMhvbA0mNzpCx6BnEAEDgnCQfD2LQ9C OHptVGvLB7HZ5J7LK6PdNWbEBFvZD76qtjfmfq08i2yfdSum02c3Fuhp0gWaGtl4NT 9QDyQe9RUI6utN4fPOdVijhOhG8yudP7XcbaKHz7lYGC=w560 h346 no Excel 使用 POI 讀取文字格式日期卻變成數字的問題
處理完之後的,是「文字」而且沒有被轉成 32949

如果有更正規或更好的方法的大大,歡迎留言給小蛙,感恩!

Excel 相關文章:

    發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

    這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料