POI很强大的解析Excel文件,将Excel解析成Sheet类。J-Excel号称是万能的Excel导入导出工具,能将Sheet解析成我们想要的model类,并提供了验证机制。而现在的web项目如果需要导入导出功能,很多人也会选择这两个结合加入web项目中。
工具/原料
电脑
IDE编译工具,jdk
方法/步骤
1、很多新手刚刚使用J-Excel的时候不知道怎么编辑Excel里面的格式才能被后台的类识别。其实文档经过poi解析后成为sheet,sheet转换问model的时候需要一定格式才能正常转化,不然会报异常。
2、如下图所示:第一行的第一空不能为空,为空会出现异常,最好填个0(这个值跟表名有关,一般转化model的时候用不到。);第二行是该表的表名让变结构更加清晰自然;第三行就是转化model的关键的东西了。{"columnName":"id","innerColumn":"","length":0,"size":0,"tookValue":"","tookName":""}这个是后台识别model的属性字段,"columnName":"id"中的id对应了PersonVo类中的id属性。第四行则就是属性的对应中文名称了。红色部分的就是需要转化为model的内容了。
3、我的蜣贺鱿柢代码是这样的:importorg.jplus.hyberbin.excel.annotation.ExcelVoConfig;importorg.jplus.h烤恤鹇灭yberbin.excel.annotation.Lang;importorg.jplus.hyberbin.excel.annotation.input.InputTextConfig;importorg.jplus.hyberbin.excel.annotation.output.OutputDefaultConfig;importorg.jplus.hyberbin.excel.bean.BaseExcelVo;/***Createdby30721on2019/7/1.*/@ExcelVoConfigpublicclassPersonVoextendsBaseExcelVo{//策略名称@InputTextConfig(nullAble=false,tip="策略名称不能为空!")@OutputDefaultConfig(nullAble=false)@Lang(value="id")//Excel导出的配置protectedStringid;//策略名称@InputTextConfig(nullAble=false,tip="策略名称不能为空!")@OutputDefaultConfig(nullAble=false)@Lang(value="name")//Excel导出的配置protectedStringname;publicStringgetId(){returnid;}publicvoidsetId(Stringid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}@OverridepublicStringtoString(){return"PersonVo{"+"id='"+id+'\''+",name='"+name+'\''+'}';}@OverridepublicintgetHashVal(){return0;}//用于自定义验证数据//@Override//publicbooleanvalidate(){//returntrue;//}}
4、service层:importcn.cy.vo.PersonVo;importorg.apache.poi.ss.usermodel.Sheet;importorg.jplus.hyberbin.excel.service.ImportExcelService;importorg.springframework.stereotype.Service;@ServicepublicclassImportService{publicvoidimportPerson(Sheetsheet)throwsException{ImportExcelServiceservice=newImportExcelService(PersonVo.class,sheet);List<PersonVo>personVos=service.doImport();for(PersonVopersonVo:personVos){System.out.println(personVo);}}}
5、测试代码:importcn.cy.service.excel.ImportServic娣定撰钠e;importo鸡堕樱陨rg.apache.poi.ss.usermodel.Sheet;importorg.apache.poi.ss.usermodel.Workbook;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;importorg.junit.Test;importorg.junit.runner.RunWith;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.test.context.junit4.SpringRunner;importjavax.annotation.Resource;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;/***Createdby30721on2019/7/1.*/@RunWith(SpringRunner.class)@SpringBootTestpublicclassVoTest{@ResourceprivateImportServiceimportService;@TestpublicvoiddoImport(){Filefile=newFile("C:\\Users\\30721\\Desktop\\personVo.xlsx");try{Workbookworkbook=newXSSFWorkbook(newFileInputStream(file));Sheetsheet=workbook.getSheet("personVo");importService.importPerson(sheet);}catch(Exceptione){e.printStackTrace();}}}
6、控制层的代码:@RequestMapping(v瞢铍库祢alue="/upload"像粜杵泳)@ResponseBodypublicvoiduploadCloudPortFile(HttpServletRequestrequest){try{Map<String,Object>map=newHashMap<String,Object>();//取得上传的文件MultipartHttpServletRequestmultipartRequest=(MultipartHttpServletRequest)request;CommonsMultipartFilefile=(CommonsMultipartFile)multipartRequest.getFile("file");//得到文件名称StringrealFileName=file.getOriginalFilename();Stringsuffix=realFileName.substring(realFileName.indexOf("."),realFileName.length());Workbookworkbook=null;if(".xlsx".equals(suffix)){workbook=newXSSFWorkbook(file.getInputStream());}else{workbook=newHSSFWorkbook(file.getInputStream());}Sheetsheet=workbook.getSheet("personVo");importService.importPerson(sheet);}catch(Exceptione){e.printStackTrace();}}