读取excel文件中的数据

前端上传excel文件以流的形式,后台接受进行数据读取,且入库

代码部分解读:

        XSSFWorkbook xssfWorkbook = new XSSFWorkbook(fis);//读取Excel文件

        Sheet sheet = xssfWorkbook.getSheetAt(0);//创建第一个工作簿内容

        int lastRowNum = sheet.getLastRowNum();//获取row下标

        row.getCell(0).getStringCellValue();//获取单元格的值


引入的包:

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

读excel文件:(跳过表头)

    public static void main(String[] args) {

    	File file = new File("G:\\aaa/bbb/20180711162826.xlsx");
    	
    	try {
    		InputStream fis = new FileInputStream(file);
    		//读取导入的Excel文件内容
			XSSFWorkbook xssfWorkbook = new XSSFWorkbook(fis);
			//获取第一个sheet工作薄
			Sheet sheet = xssfWorkbook.getSheetAt(0);
			
			//读取出来的数据放到ListMap中
			List<Map<String, Object>> mapList = 
					new ArrayList<>();
			//获取sheet的最大row下标,实际获取的行数-1
			int lastRowNum = sheet.getLastRowNum();
			if(lastRowNum > 0){
				for(Row row : sheet){
					//跳过表头
					if(row.getRowNum() == 0){
						continue;
					}
					//判断导入的excel文件中的是否存在空
					boolean flag = isExistNull(row);
					if(flag){
						Map<String, Object> susMap = new HashMap<>();
						susMap.put("id", row.getCell(0).getStringCellValue());
						System.out.println("第"+ (row.getRowNum()+1) + "行,第1个单元格值为:" +row.getCell(0).getStringCellValue());
						susMap.put("form", row.getCell(0).getStringCellValue());
						System.out.println("第"+ (row.getRowNum()+1) + "行,第2个单元格值为:" +row.getCell(1).getStringCellValue());
						susMap.put("tion", row.getCell(0).getStringCellValue());
						System.out.println("第"+ (row.getRowNum()+1) + "行,第3个单元格值为:" +row.getCell(2).getStringCellValue());
						susMap.put("name", row.getCell(0).getStringCellValue());
						System.out.println("第"+ (row.getRowNum()+1) + "行,第4个单元格值为:" +row.getCell(3).getStringCellValue());
						susMap.put("fee", row.getCell(0).getStringCellValue());
						System.out.println("第"+ (row.getRowNum()+1) + "行,第5个单元格值为:" +row.getCell(4).getStringCellValue());
						mapList.add(susMap);
					}else{
						//获取当前行数
						int currentNum = row.getRowNum() + 1;
//						return  "第" + currentNum + "行数据出错,不能为空!"
						System.out.println("第" + currentNum + 
								"行数据出错,不能为空!");
					}
				}
			}else{
				System.out.println("您导入的excel文件为空,请重新导入!");
//				return "您导入的excel文件为空,请重新导入!";
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}
    	
    	
	}
    
    //判断导入的excel文件中row行的每个cell时候是否存在空
    public static boolean isExistNull(Row row){
    	Cell cell0 = row.getCell(0);
    	if(cell0 == null){
    		return false;
    	}else{
    		cell0.setCellType(Cell.CELL_TYPE_STRING);
    		if(StringUtils.isBlank(cell0.getStringCellValue())){
    			return false;
    		}
    	}
    	Cell cell1 = row.getCell(1);
    	if(cell1 == null){
    		return false;
    	}else{
    		cell1.setCellType(Cell.CELL_TYPE_STRING);
    		if(StringUtils.isBlank(cell1.getStringCellValue())){
    			return false;
    		}
    	}
    	
    	Cell cell2 = row.getCell(2);
    	if(cell2 == null){
    		return false;
    	}else{
    		cell2.setCellType(Cell.CELL_TYPE_STRING);
    		if(StringUtils.isBlank(cell2.getStringCellValue())){
    			return false;
    		}
    	}
    	
    	Cell cell3 = row.getCell(3);
    	if(cell3 == null){
    		return false;
    	}else{
    		cell3.setCellType(Cell.CELL_TYPE_STRING);
    		if(StringUtils.isBlank(cell3.getStringCellValue())){
    			return false;
    		}
    	}
    	
    	Cell cell4 = row.getCell(4);
    	if(cell4 == null){
    		return false;
    	}else{
    		cell4.setCellType(Cell.CELL_TYPE_STRING);
    		if(StringUtils.isBlank(cell4.getStringCellValue())){
    			return false;
    		}
    	}
    	return true;
    	
    }

文件内容:


文件位置:


运行读取文件内容如下:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值