1. 需求
專案中excel 匯入匯出框架是用的poi(新專案推薦使用easyexcel),excel匯出比較簡單,比較麻煩的是excel匯入,因為幾乎每個欄位都必須校驗是否合法,所有欄位的校驗都寫在一起的話,**會很亂,特別是字段很多,業務校驗規則有比較複雜的時候,很容易出bug,後續也很難維護。excel匯入,專案中還有乙個需求是,把excel中所有校驗不通過的錯誤資訊一起提示出來,而不是檢查到乙個錯誤就終止讀取,這樣可以提高使用者的效率。所以封裝了乙個校驗和業務分開的excel匯入工具。
2. 實現方案
大致思路是,利用反射將讀取到值賦給對應的字段,其中每個欄位都可以單獨設定乙個校驗介面,校驗通過則賦值,不通過則新增錯誤資訊。
讀取excel值,通過反射賦給對應的字段
/**
* @param sheet excel**頁
* @param columnconfiglist 實體類字段配置列表
* @param tclass 實體類型別
* @param * @return
*/public
excelimportdata
read
(sheet sheet, list
columnconfiglist, class
tclass)
for(
int i =
1; i < count; i++)}
else}if
(excelimportdata.
getflag()
== excelimportdata.success)
}catch
(illegalacces***ception e)
catch
(nosuchfieldexception e)
catch
(instantiationexception e)
}return excelimportdata;
}
校驗介面,每個字段單獨設定
// 校驗介面
public
inte***ce
iexcelvalidator
3. 主要類設計
具體**分析,後續有時間再補。
4. 使用demo
引入依賴
>
>
com.github.chocolatecwgroupid
>
>
excelvalidateartifactid
>
>
1.0.0version
>
dependency
>
使用示例
commonexcelreader commonexcelreader =
newcommonexcelreader()
; file excelfile =
newfile
("excel檔案路徑");
// 實體類字段配置,與excel**的列一一對應,可使用configbuilder類生成,陣列的順序即**列的順序
list
columnconfiglist =
newcolumnconfig.configbuilder
(new
string
).setvalidator
("testpropertyone"
, commonvalidator.mobilevalidator)
// 設定欄位的校驗器,key為欄位名
.build()
; excelimportdata
excelimportdata = commonexcelreader.
read
(excelfile, columnconfiglist, testexcelentity.
class);
if(excelimportdata.
getflag()
== excelimportdata.success)
else
5. github 位址
好用記得給star!
Excel批量匯入工具(註解形式)
工具類 eexeltool public class exceltool else if filename.endswith xls else array read book catch exception e poi 3.9乃自動關閉,故而無book.close 方法 return array 將...
基於JXL的Excel資料匯入工具
寫這東西主要是前段時間專案中有類似的需求,覺得匯入excel也是乙個比較常用的功能,所以進行了簡單的封裝 功能介紹 1.乙個簡單的利用jxl匯入excel的工具 2.資料集的獲取方式支援jdbc 內部利用record構建兩種 3.僅支援字元型別 數值型別 日期型別資料的匯入 附件中的jar可以引入直...
簡單的Excel匯入匯出工具
支援多sheet匯出匯入 1.建立模型 data excelsheet sheet 判斷題 title 判斷題 public class questionjudgeeo 複製 2.匯出 test public void export else questionjudgeeo.setscore i j...