Java導入Excel文件如何對應屬性類對應的字段?Java導出Excel文件如何實現?
下面分爲兩段供各位測試,要是不懂或者實在不行可以評論一下,看到我會回覆的
jar這些你們可以自己找,用maven也就是複製粘貼的事。
下面的鏈接是封裝好的Excel文件導入導出的樣式跟註解:
鏈接: https://pan.baidu.com/s/1k484vLTeTuMnTaNsOqYFqQ 提取碼: wtkk
Excel文件導入導出必要的jar包:
屬性類中設置:
通過畫出的綠線那裏的順序將Excel文件中的數據一一對應用於導入導出
@ExcelField(title=“科目名稱”, align=2, sort=25,groups={1,2})
導入:
前端通過form表單提交Excel文件數據:
<form id="importForm" action="${ctx}/rental/fcRentalRegistration/import" method="post" enctype="multipart/form-data"
class="form-search" style="padding-left:20px;text-align:center;" onsubmit="loading('正在導入,請稍等...');"><br/>
<input id="uploadFile" name="file" type="file" style="width:330px"/><br/><br/>
<input id="btnImportSubmit" class="btn btn-primary" type="submit" value=" 導 入 "/>
<a href="${ctx}/rental/fcRentalRegistration/import/template">下載模板</a>
</form>
後端導入通過前端提交的文件利用封裝好的Java類直接填充屬性類中對應的屬性:
@RequestMapping(value = "import", method=RequestMethod.POST)
public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
if(Global.isDemoMode()){
addMessage(redirectAttributes, "演示模式,不允許操作!");
return "redirect:" + adminPath + "/sys/user/list?repage";
}
try {
int successNum = 0;//用於計算成功數量
int failureNum = 0;//用於計算錯誤數量
StringBuilder failureMsg = new StringBuilder();
ImportExcel ei = new ImportExcel(file, 1, 0);//這個是ImportExcel(封裝好的Java類)
int[] group = {1};//group可以不要
List<GrlLonixSubjectFinancial> list = ei.getDataList(GrlLonixSubjectFinancial.class,group);//直接調用這個方法就可以返回對應的字段內部是通過你導出的@ExcelField註解指定的字段進行自動賦值
for (GrlLonixSubjectFinancial subject : list){//增強for是直接返回屬性類的了
try{
if ("true".equals(checkCode("", subject.getFinancialCode()))){
//BeanValidators.validateWithException(validator, subject);
subject.setParent(findPreambleCode(null,subject.getFinancialCode()));
grlLonixSubjectFinancialService.save(subject,"yes");//添加到數據庫
successNum++;
}else{
failureMsg.append("<br/>科目編碼 "+subject.getFinancialCode()+" 已存在; ");
failureNum++;
}
}catch(ConstraintViolationException ex){
failureMsg.append("<br/>科目編碼 "+subject.getFinancialCode()+" 導入失敗:");
List<String> messageList = BeanValidators.extractPropertyAndMessageAsList(ex, ": ");
for (String message : messageList){
failureMsg.append(message+"; ");
failureNum++;
}
}catch (Exception ex) {
failureMsg.append("<br/>科目編碼 "+subject.getFinancialCode()+" 導入失敗:"+ex.getMessage());
}
}
if (failureNum>0){
failureMsg.insert(0, ",失敗 "+failureNum+" 條用戶,導入信息如下:");
}
addMessage(redirectAttributes, "已成功導入 "+successNum+" 條科目"+failureMsg);
} catch (Exception e) {
addMessage(redirectAttributes, "導入科目失敗!失敗信息:"+e.getMessage());
}
return "redirect:" + adminPath + "/subject/grlLonixSubjectFinancial/list?repage";//返回路徑
}
導出:
後端導出是通過上面屬性類設置在字段上的註解而對應導出的:
@RequestMapping(value = "export", method=RequestMethod.POST)
public String exportFile(GrlLonixSubjectFinancial grlLonixSubjectFinancial, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
try {
String fileName = "科目數據"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";//文件名
//數據庫查詢數據,注意:這裏查詢的數據是List<屬性類>的數據的。我這裏只是多了一層,看下面傳參就知道了
Page<GrlLonixSubjectFinancial> page = grlLonixSubjectFinancialService.findPage(new Page<GrlLonixSubjectFinancial>(request, response, -1), grlLonixSubjectFinancial);
int[] group = {1};//這個可以不用
new ExportExcel("科目數據", GrlLonixSubjectFinancial.class,group).setDataList(page.getList()).write(response, fileName).dispose();
return null;//這個返回可以根據自己的路徑來定
} catch (Exception e) {
addMessage(redirectAttributes, "導出科目失敗!失敗信息:"+e.getMessage());
}
return "redirect:" + adminPath + "/subject/grlLonixSubjectFinancial/list?repage";
}