使用easyexcel導(dǎo)出的excel文件,使用poi讀取時(shí)異常處理方案
場(chǎng)景
一個(gè)導(dǎo)出服務(wù),傳入json數(shù)據(jù),根據(jù)數(shù)據(jù)生成excel文件返回。
別的項(xiàng)目有一個(gè)需求,導(dǎo)出文件給用戶(hù)修改,修改后再次導(dǎo)入。
之前一直沒(méi)有問(wèn)題,這一天,突然報(bào)了個(gè) 【文件讀取失敗】異常?。?!(這里為后臺(tái)的自定義異常信息,其原因是POI讀取文件時(shí)拋出了異常)
經(jīng)過(guò)研究發(fā)現(xiàn),使用服務(wù)導(dǎo)出的excel文件大小是6kb,但是只要打開(kāi)文件,再保存,哪怕什么都不修改,文件大小會(huì)變?yōu)?strong>11kb。然后再次導(dǎo)入時(shí),就能正常導(dǎo)入。(問(wèn)我之前為什么沒(méi)問(wèn)題?正經(jīng)人導(dǎo)出來(lái)肯定是修改了再導(dǎo)回去?。。。〔蝗辉瓟?shù)據(jù)導(dǎo)回去干嘛?。。。?/p>
但是,問(wèn)題既然出現(xiàn)了,那肯定要解決嘛。于是,開(kāi)始了一頓的搜索…肯定是沒(méi)有搜索到,不然我就不寫(xiě)這個(gè)了(也可能是搜索得不到位O(∩_∩)O哈哈~)。
環(huán)境
easyexcel 2.2.6版本
找bug
現(xiàn)在下載了一個(gè)服務(wù)(使用easyexcel寫(xiě)的)導(dǎo)出的,沒(méi)有經(jīng)過(guò)修改的文件A.xlsx,然后復(fù)制了一份并命名B.xlsx.
- A.xlsx 6kb 未修改
- B.xlsx 11kb 原6kb,只是打開(kāi)后點(diǎn)了保存。沒(méi)有動(dòng)任何數(shù)據(jù)?。。?/li>
現(xiàn)象:
- A文件上傳報(bào)【文件讀取失敗】
- B文件上傳成功
這里把兩個(gè)文件后綴改成rar(壓縮文件格式都可以)
然后進(jìn)行了兩個(gè)文件的對(duì)比,有了以下發(fā)現(xiàn):
- A文件的shardStrings.xml中沒(méi)有存放數(shù)據(jù),它的數(shù)據(jù)存在worksheets/sheet1.xml中
- B文件的數(shù)據(jù)存放在shardStrings.xml中,而worksheets/sheet1.xml中只記錄了sheet的一些配置信息
但是直接用office軟件打開(kāi),不管哪個(gè)顯示都是正常的,沒(méi)有報(bào)錯(cuò),數(shù)據(jù)也正常,說(shuō)明它是兼容的,但是保存的時(shí)候,office會(huì)把A文件的存儲(chǔ)格式轉(zhuǎn)換為B文件。
過(guò)程如圖:
思路
我剛開(kāi)始以為是easyexcel進(jìn)行了數(shù)據(jù)或者文件壓縮導(dǎo)致的,于是我搜索了下,沒(méi)有任何有用的信息,浪費(fèi)了我好一會(huì)兒時(shí)間。
解決
靈機(jī)一動(dòng),阿里的,應(yīng)該有官方文檔,搜索了下,真有官方文檔。
最終在文檔在常見(jiàn)問(wèn)題中找到了這個(gè)解決辦法(當(dāng)然,因?yàn)檫@里的業(yè)務(wù)是小模板數(shù)據(jù)填充,不涉及到大數(shù)據(jù)量,所以直接使用,如果有大數(shù)據(jù)量,按文檔的解釋是可能溢出的,各位按自己業(yè)務(wù)場(chǎng)景處理)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Eclipse插件開(kāi)發(fā)實(shí)現(xiàn)控制臺(tái)輸出信息的方法
今天小編就為大家分享一篇關(guān)于Eclipse插件開(kāi)發(fā)實(shí)現(xiàn)控制臺(tái)輸出信息的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01關(guān)于junit單元測(cè)試@Test的使用方式
這篇文章主要介紹了關(guān)于junit單元測(cè)試@Test的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07Java實(shí)現(xiàn)簡(jiǎn)單員工管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單員工管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02五種SpringBoot實(shí)現(xiàn)數(shù)據(jù)加密存儲(chǔ)的方式總結(jié)
這篇文章主要為大家詳細(xì)介紹了五種常見(jiàn)數(shù)據(jù)加密存儲(chǔ)的方法(結(jié)合SpringBoot和MyBatisPlus框架進(jìn)行實(shí)現(xiàn)),文中的示例代碼講解詳細(xì),需要的可以參考下2023-11-11Java圖片處理開(kāi)源框架Thumbnailator
這篇文章主要為大家詳細(xì)介紹了Java圖片處理開(kāi)源框架Thumbnailator的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05Java+Springboot搭建一個(gè)在線(xiàn)網(wǎng)盤(pán)文件分享系統(tǒng)
本主要介紹了通過(guò)springboot+freemark+jpa+MySQL實(shí)現(xiàn)的在線(xiàn)網(wǎng)盤(pán)文件分享系統(tǒng),其功能跟百度網(wǎng)盤(pán)非常類(lèi)似,可以實(shí)現(xiàn)文件的上傳、移動(dòng)、復(fù)制、下載等,需要的可以參考一下2021-11-11Java編程guava RateLimiter實(shí)例解析
這篇文章主要介紹了Java編程guava RateLimiter實(shí)例解析,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01