POI导入Excel含.xls和.xlsx

之前用的jxl,但是遇到07版以上的.xlsx后缀的文件,目前jxl我无法解决.

就用POI做了个简单的导入Excel表,含.xls和.xlsx后缀的导入.

POI中这两种后缀的文件,是使用2个对象来操作的.


先写思路,后附上代码.

POI跟JXL有所不一样.


POI需要excel文件上传的全路径,用全路径创建IO流,再进行操作.(JXL需要excel文件上传后的File对象就可以直接操作了.)

创建好IO流后,就需要判断一下了,判断后缀是.xls或是.xlsx

.xls      对应      HSSFWorkbook book=new HSSFWorkbook(io);

.xlsx    对应      XSSFWorkbook book=new XSSFWorkbook(io)

说到这就有个问题了,我写完程序跑起来之后,.xls文件导入没问题,但是.xlsx文件还是报错.

网上查了查看别人的POI包我都有就是版本不一样,觉得不是这的问题.不过还是换包试了试.原来问题就在这.

我之前的jar包:



从新下载的jar包:


别的版本的jar包不知道,反正上面的亲测有效.

如果你写完代码,.xls的能跑,.xlsx的报异常,可能就是jar包问题了.

之后附上代码,因为是自己练习,没有加上什么验证,只是为了跑通的.

/**
	 * 文件上传
	 */
	@RequestMapping("/fenye/excelfile")
	public String excelfile(HttpServletRequest request,MultipartFile excel,Model model ){
			/*获取工程根路径*/
			String path=request.getSession().getServletContext().getRealPath("");
			System.out.println(path);
			/*获取文件名称,并用UUID替换文件名*/
			String name=UUID.randomUUID().toString()+excel.getOriginalFilename()
										.substring(excel.getOriginalFilename().lastIndexOf("."));
			/*组合新文件存储的完整路径*/
			String newName=path+"/excel/"+name;
			/*创建文件对象*/
			File file=new File(newName);
			/*判断文件路径是否存在,如不存在创建文件夹*/
			if(!file.exists()){
				file.mkdirs();
			}
			try {
				/*写入文件*/	
				excel.transferTo(file);
				model.addAttribute("msg", "文件上传成功!");
			} catch (IllegalStateException | IOException e) {
				model.addAttribute("msg", "文件上传失败!");
				e.printStackTrace();
			}
			String msg=fenYeService.importExcel(newName);
			model.addAttribute("msg", msg);
		return "upLoadFile";
		
	}





/**
	 * 导入excel
	 */
	private static final int STARTNO=0;
	
	@Override
	public String importExcel(String newName) {
		/*创建数据库批量导入的集合*/
		List<Excel> list=new ArrayList<>();
		/*工作空间对象*/
		Workbook book=null;
		/*文件流对象*/
		FileInputStream input=null;
		/*反馈*/
		String msg=null;
		
		/*通过后缀判断文件类型是否匹配*/
		if(!newName.endsWith(".xls") && !newName.endsWith(".xlsx")){
			msg ="文件类型错误!";
			return msg;
		}
		try {
			/*将文件放入流中*/
			input=new FileInputStream(newName);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		/*如果是低版本就创建低版本对象*/
		if(newName.endsWith(".xls")){
			try {
				book=new HSSFWorkbook(input);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		/*如果是高版本就创建高版本对象*/
		if(newName.endsWith(".xlsx")){
			try {
				book=new XSSFWorkbook(input);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		/*工作表*/
		Sheet sheet=null;
		/*行*/
		Row row=null;
		/*列*/
		String cell=null;
		/*遍历工作表*/
		for(int i=STARTNO;i<book.getNumberOfSheets();i++){
			/*循环获取每一个工作表*/
			sheet=book.getSheetAt(i);
			for(int j=sheet.getFirstRowNum()+1;j<sheet.getLastRowNum();j++){
				Excel excel=new Excel();
				row=sheet.getRow(j);
				/*获取属性-编号*/
				cell=row.getCell(0).toString();
				excel.setCode(cell);
				/*姓名*/
				cell=row.getCell(1).toString();
				excel.setName(cell);
				/*部门*/
				cell=row.getCell(2).toString();
				excel.setDept(cell);
				/*日期*/
				cell=row.getCell(3).toString();
				SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
				try {
					excel.setDate(format.parse(cell));
				} catch (ParseException e) {
					e.printStackTrace();
				}
				/*备注*/
				
				cell=row.getCell(4).toString();
				excel.setRemark(cell);
				
				list.add(excel);
			}
		}
		int y=fileExcelMapper.importFileExcel(list);
		if(y>0){
			msg="文件导入数据库成功!";
			return msg;
		}else{
			msg="文件导入数据库失败!";
			return msg;
		}
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值