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

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

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

問題

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

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

小蛙處理方式

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

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

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

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

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

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

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

貼上

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

原本 excel 自動補成「自訂」
處理完之後的,是「文字」而且沒有被轉成 32949

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

發佈留言

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