第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 关于Easyexcel读取EXCEL合并单元格信息

关于Easyexcel读取EXCEL合并单元格信息

时间:2021-11-23 14:50:53

相关推荐

关于Easyexcel读取EXCEL合并单元格信息

关于Easyexcel读取EXCEL合并单元格信息

1.excel模版

@Configurationpublic class TestModel {/*** 开发部*/@ExcelProperty(value = "开发部",index = 0)private String kaifabu;/*** A2*/@ExcelProperty(value = "A2",index = 1)private String a2qiyoutian;/*** 区块*/@ExcelProperty(value = "区块",index =2)private String qukuai;/*** 项目部*/@ExcelProperty(value = "项目部",index =3)private String xiangmubu;/*** 开发部*/@ExcelProperty(value = "开发部1部", index =4)private String kaifabu1;public String getKaifabu() {return kaifabu;}public void setKaifabu(String kaifabu) {this.kaifabu = kaifabu;}public String geta2qiyoutian() {return a2qiyoutian;}public void seta2qiyoutian(String a2qiyoutian) {this.a2qiyoutian = a2qiyoutian;}public String getQukuai() {return qukuai;}public void setQukuai(String qukuai) {this.qukuai = qukuai;}public String getXiangmubu() {return xiangmubu;}public void setXiangmubu(String xiangmubu) {this.xiangmubu = xiangmubu;}public String getKaifabu1() {return kaifabu1;}public void setKaifabu1(String kaifabu1) {this.kaifabu1 = kaifabu1;}@Overridepublic String toString() {return "TestModel [kaifabu=" + kaifabu + ", a2qiyoutian=" + a2qiyoutian + ", qukuai=" + qukuai + ", xiangmubu="+ xiangmubu + ", kaifabu1=" + kaifabu1 + "]";}}

2.Service层(处理单元格)

@Servicepublic class TryService extends AnalysisEventListener<Map<Integer,String>>{// class readModel extends AnalysisEventListener<Map<Integer, String>>{private static final Logger log = LoggerFactory.getLogger(TryService.class);// 所有要插入的数据public static List<TestModel> datas = new ArrayList<>();// 缓存上一级跨行的数据Map<Integer, String>preContent;@Overridepublic void invoke(Map<Integer, String> o, AnalysisContext analysisContext) {// TODO Auto-generated method stubTestModel testModel = new TestModel();String kaifabu = o.get(0);String a2qiyoutian = o.get(1);String qukuai = o.get(2);String xiangmubu = o.get(3);String kaifabu1 = o.get(4);// 如果数据是空的话,从缓存对象中取值if(StringUtils.isEmpty(kaifabu)){kaifabu = preContent.get(0);}if(StringUtils.isEmpty(a2qiyoutian)) {a2qiyoutian = preContent.get(1);}if(StringUtils.isEmpty(qukuai)) {qukuai = preContent.get(2);}if(StringUtils.isEmpty(xiangmubu)) {xiangmubu = preContent.get(3);}if(StringUtils.isEmpty(kaifabu1)) {kaifabu1 = preContent.get(4);}// 为单元格赋值testModel.setKaifabu(kaifabu);testModel.seta2qiyoutian(a2qiyoutian);testModel.setQukuai(qukuai);testModel.setXiangmubu(xiangmubu);testModel.setKaifabu1(kaifabu1);// 将数据放入listdatas.add(testModel);// 复用跨行数据的实现String uniquKey = o.get(0);if(!StringUtils.isEmpty(uniquKey) || preContent == null) {preContent = o;}}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {// TODO Auto-generated method stublog.info("读取数据完成");}}

这里面主要还是基于传统EasyExcel读取信息的原理,在对单元格方面做出了处理,并且excel表格数据都主要存储在datas里面

// 将数据放入listdatas.add(testModel);

原理是将合并元格数据放入Map中进行存储,然后对单元格里面的内容进行判断,如果该区间的单元格为空,则将缓存中的值赋给其单元格。

String uniquKey = o.get(0);if(!StringUtils.isEmpty(uniquKey) || preContent == null) {preContent = o;}

如果A列的值为空,那么说明这是跨行列,如果取的值不是空,那说明这是第一次读取跨行列数据,如果preContent为空,说明这是第一次读取sheet表格的数据

3.Rest层

这里代码比较糙(可能存在不必要的代码),主要是用于测试方法是否合理正确。

@RequestMapping("uploadProjectDepartmentExcel")public JSONObject uploadProjectDepartmentExcel(@RequestParam(value = "file") MultipartFile file) {JSONObject returnData = new JSONObject();JSONObject response = new JSONObject();returnData.put("cmd", "uploadProjectDepartmentExcel");returnData.put("type", "response");returnData.put("response", response);try {// 检验前端数据if(file == null || file.isEmpty()) {throw new MyException("未找到 file字段");}// 暂存临时文件String path = FilePath.CACHE_PATH + "/uploadFile" + System.currentTimeMillis() + "/";String originalFilename = file.getOriginalFilename();log.info("缓存文件:"+originalFilename );File filepath = new File(path);// 创建文件夹if(!filepath.exists()) {filepath.mkdirs();}// 文件路径File uploadFile = new File(path + originalFilename);file.transferTo(uploadFile);/*************************** 1、读取数据 ***************************/// 表单int sheetNo = 0;// 行数(从该行开始读取)int headRownumber = 0;EasyExcel.read(uploadFile,new ProjectManagementExcelService()).sheet(sheetNo).headRowNumber(headRownumber).doRead();List<ProjectManagementExcelModel> message = ProjectManagementExcelService.datas;response.put("res", true);response.put("message", message);}catch (MyException e) {// TODO: handle exceptionlog.error("uploadProjectDepartmentExcel",e.getReason());response.put("res", false);response.put("exception", e.getReason());}catch (Exception e) {// TODO: handle exceptionlog.error("uploadProjectDepartmentExcel",e.getMessage());response.put("res", false);response.put("exception", e.getMessage());}return returnData;}

试过文本地址和文本流两种方法来导入excel,后来发现通过地址来导入excel是行的通的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。