如何在Java中导入Excel表数据

xiaoxiao2021-02-28  45

前期准备和申明:

    1.之前自己在做这个Excel导入的时候也看了网上的一些博客,jxl很容易存在.xls 和.xlsx格式判断的问题。所以我选择POI,自己可以去网上下载,下载地址:http://poi.apache.org/download.html

    2.Excel数据模型准备好

开始:

   jsp和js中的代码自己写哈,因为我们用的前段框架可能不同,所以写出来也没有用,如果用ace框架的倒是可以私信我要代码,我这里只展示一下效果图

在Java后台中

  首先我们如何在后台获取到你上传的Excel的文件类型和名称呢?在你的action中定义这个几个变量,我是在公司封装的框架下的某个层。但道理一样,如下:

    private File     uploadexcel;                    //文件(和jsp中的名字保持一致)     private String uploadexcelFileName;            //文件名称     private String uploadexcelContentType;        //文件类型

值得注意的是,在你的jsp中<input >标签中文件的名字必须是uploadexcel,例如<input id="importFile" type="file" data-options="required:false"                         name="dto.uploadexcel" />

然后是在后台的上传的方法,我这里会贴出与代码中相关的方法,但不会把封装的公共类拿出来,望见谅。

public void uploadexcle(BaseAbstractDto basedto) throws Exception{                 MemberDto dto=super.getExactlyDto(basedto);     //公司封装的参数传输层,按你们的框架自行修改           File uploadexcle =dto.getUploadexcel();                //获取上传的Excel表格文件         List<Member> list = new ArrayList<Member>();             String filetype =UploadFileUtil.getFileExp(dto.getUploadexcelFileName());    //这个方法我会在名为方法一的下面贴出来             Workbook workbook=null;                                    //POI中的             if(filetype.equals(".xls")||filetype.equals(".xlsx")){                 if (uploadexcle!=null&&uploadexcle.length()>0) {                                                             workbook=UploadFileUtil.getWorkbook(uploadexcle);                //这个方法我会在名为方法二的下面贴出来                            Sheet sheet=UploadFileUtil.deleteNullRow(workbook.getSheetAt(0));   //这个方法我会在名为方法三的下面贴出来                 for (int numRows = 1; numRows <= sheet.getLastRowNum(); numRows++) {                     Row row = sheet.getRow(numRows);  //poi中的                     Member member = new Member();       //我自己的实体类                     for (int CellNum = 0; CellNum < row.getLastCellNum(); CellNum++) {                                                  Cell cell = row.getCell(CellNum);//poi中的                         if(cell!=null){                             cell.setCellType(Cell.CELL_TYPE_STRING);                         }                             switch (CellNum){                             case 0://姓名                  //你Excel中的第一列,这里说一下哈,一定和你Excel中的顺序保持一致,下面我要是记起来再回啰嗦一句的                                 if(cell==null){                                     member.setName("");                                 }else{                                     member.setName(cell.toString());                                         }                                 break;                             case 1://名族                                 if(cell==null){                                     member.setNation("");                                 }else{                                     member.setNation(cell.toString());                                 }                                 break;                             case 2://身份证号码                                 if(cell==null){                                     member.setIdNumber("");                                 }else{                                     member.setIdNumber(cell.toString());                                     member.setUserName("a"+cell.toString());                                 }                                 break;                             case 3://电话号码                                 if(cell==null){                                     member.setPhoneNum("");                                 }else{                                                                         member.setPhoneNum(cell.toString());                                 }                                 break;                             //邮箱                             case 4:                                 if(cell==null){                                     member.setEmail("");                                 }else{                                     member.setEmail(cell.toString());                                 }                                 break;                             //性别代码                             case 5:                                                                  if(cell==null){                                     member.setGenderCode("");                                                                  }else{                                     member.setGenderCode(cell.toString());                                 }                                 break;                             //性别                             case 6:                                                                  if(cell==null){                                     member.setGenderName("");                                 }else{                                     member.setGenderName(cell.toString());                                 }                                 break;                             //出生日期                     /*        case 10:                                 if(cell==null){                                     member.setBirthday(null);                                 }else{                                     SimpleDateFormat sdf=new SimpleDateFormat("dd-MM -yyyy");                                     String birthTime=cell.toString();                                     if(!StringUtils.isNullOrEmpty(birthTime)){                                                                                  Date date=sdf.parse(birthTime);                                         member.setBirthday(date);                                         //staffRegRequest.setBirthTime(date);                                     }else{                                         member.setBirthday(null);                                         //staffRegRequest.setBirthTime(null);                                     }                                 }                                 break;*/                             //邮编                             case 7:                                 if(cell==null){                                     member.setZipCode("");                                     //staffEmpoymentResponse.setJobTitleCode("");                                 }else{                                     member.setZipCode(cell.toString());                                 }                                 break;                             //现住址                             case 8:                                 if(cell==null){                                     member.setAddress("");                                 }else{                                     member.setAddress(cell.toString());                                 }                                 break;                                  }                                                  }                 member.setStatus("1");       //设置一些固定属性的值                 member.setAuditStatus("1");          //设置一些固定属性的值                                  list.add(member);   //把实体类中设置的值封装到实体中后在放到list集合中                 }                 dto.setMembers(list);                 saveMemberList(dto);  //这里你们估计要变一下了,这是往数据库保存这个实体的方法,我里面还有调别的接口,就不把这个方法铺出来了,你们就直接把这个当做save方法存到数据库中就行。方法参数可以直接是实体类,不用我这里的dto。另外service和dao层我也不铺了,因为关系不大                 }else{                     dto.setOpFlg("-1");                     dto.setMsg("上传文件为空,请重新上传");                 }                              }else {                 dto.setOpFlg("-1");                 dto.setMsg("上传文件格式不正确,请选择excel格式文件上传");             }                                        }

这里做个简要说明啊,重要的代码我再后面做了批注。我觉得说的够啰嗦了,而且关键也说清楚了哈。没意见的往下看,有意见的可以关了。嘻嘻嘻嘻,哈哈哈

方法一

public static String getFileExp(String fileName) throws Exception{         int pos = fileName.lastIndexOf(".");         return fileName.substring(pos);     }

方法二

    public static Workbook getWorkbook(File file) throws IOException, InvalidFormatException{         FileInputStream inputStream=new FileInputStream(file);         Workbook workbook=WorkbookFactory.create(inputStream);         return workbook;     }

方法三

    public static Sheet deleteNullRow(Sheet sheet){         if(sheet!=null){             Row row = null;             Cell cell = null;             for (int numRows = 1; numRows <= sheet.getLastRowNum(); numRows++){                 row = sheet.getRow(numRows);                 boolean nullRowMark = true;                 //每一行的前三列如果都为空则删掉这行                 for(int numCells = 0; numCells<=2; numCells++){                     cell = row.getCell(numCells);                     nullRowMark = nullRowMark&&(cell==null||cell.getCellType()==HSSFCell.CELL_TYPE_BLANK);                 }                 //删除空行                 if(nullRowMark){                     int ls=sheet.getLastRowNum();                     sheet.shiftRows(numRows, numRows, ls-numRows);                     numRows = numRows-1;                     Row nullrow=sheet.getRow(ls);                       sheet.removeRow(nullrow);                 }             }         }         return sheet;     }

那么至此,这不武功秘籍就差不多完结了。祝各位小伙伴早日修行得道啊。觉得有用就支持一下下下下啊

转载请注明原文地址: https://www.6miu.com/read-96718.html

最新回复(0)