java解析Excel文件

1 篇文章 0 订阅

这是我所要解析的文件,我只取其中快递单号、省份、应到日期的数据。其他我都忽略不取,需求要求的。

            String fullFileName = "/Users/mac/Desktop/zto/expressExcel.xlsx";
            InputStream is = new FileInputStream(fullFileName);//先根据路径获取到文件,我的是Mac的路径
            int date = -1;//日期
            int num = -1;//运单
            int pro = -1;//省份
            XSSFWorkbook wb = new XSSFWorkbook(bis);//创建工作簿
            ArrayList<ExpressExcelVO> expressExcelVOArrayList = new ArrayList<>();//记录每一行cell所生成的数据
            for (Sheet sheet:wb) {//开始遍历每一页
                if (sheet.getLastRowNum() > 0){//判断空
                    XSSFRow row = (XSSFRow) sheet.getRow(0);//先获取第一行物流文字排列格式,记录索引
                    int index = 0;//记录当前遍历的位置
                    for (Cell cell: row) {//开始遍历这一页的每个数据
                        switch (cell.toString()){//如果相同就把当前位置的索引赋值给他
                            case "快递单号":
                                num = index;
                                break;
                            case "应到日期":
                                date = index;
                                break;
                            case "省份":
                                pro = index;
                                break;
                        }
                        ++index;
                    }
                    //判断有没有这几个数据,-1就是没有
                    if (num == -1 && date == -1 && pro== -1){
                        continue;
                    }else{
                        getExcelCell(date, num, pro,expressExcelVOArrayList, sheet);//根据3个索引解析出每一行的数据,从第二行开始
                    }
                }

//调用方法
private static void getExcelCell(int date, int num, int pro, ArrayList<ExpressExcelVO> expressExcelVOArrayList, Sheet sheet) {
        int rowNo = sheet.getLastRowNum();//总共的行数
        count += rowNo;
        //开始循环标题下的数据
        for (int i = 1; i <= rowNo; i++) {
            ExpressExcelVO expressExcelVO = new ExpressExcelVO();
            XSSFRow sheetRow = (XSSFRow) sheet.getRow(i);
            //运单号
            XSSFCell expressNum = sheetRow.getCell(num);
            if (null != expressNum){
                expressExcelVO.setExpressNumber(expressNum.toString());//放入运单号
            }
            //省份
            XSSFCell province= sheetRow.getCell(pro);
            if (null != province){
                expressExcelVO.setProvince(province.toString());//放入省市
            }
            //应到时间
            XSSFCell arrDate = sheetRow.getCell(date);
            if (null != arrDate){
                Date dateCellValue = arrDate.getDateCellValue();
                //时间+1
                Calendar calendar = new GregorianCalendar();
                calendar.setTime(dateCellValue);
                calendar.add(Calendar.DATE,1);
                DateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date time = calendar.getTime();
                expressExcelVO.setArriveDate(new Timestamp(time.getTime()));//放入应到时间
                String format = formater.format(time);
                System.out.println(format);
                expressExcelVOArrayList.add(expressExcelVO);
            }
        }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值