解析Excel表(总结)

1.解析.xls和.xlsx格式表格

代码:

 String prefix = fileName.substring(fileName.lastIndexOf(".") + 1);
        Workbook wb = null;
        if ("xls".equals(prefix)) {
            FileInputStream fis = null;
            try {
                fis = new FileInputStream((File) file);
                wb = new HSSFWorkbook(fis);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else if ("xlsx".equals(prefix)) {
            try {
                wb = new XSSFWorkbook((File) file);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InvalidFormatException e) {
                e.printStackTrace();
            }
        }


        //开始解析
        Sheet sheet = wb.getSheetAt(0);     //读取sheet 0


        int firstRowIndex = sheet.getFirstRowNum() + 1;   //第一行是列名,所以不读
        int lastRowIndex = sheet.getLastRowNum();
        System.out.println("firstRowIndex: " + firstRowIndex);
        System.out.println("lastRowIndex: " + lastRowIndex);


        for (int rIndex = firstRowIndex; rIndex <= lastRowIndex; rIndex++) {   //遍历行
            System.out.println("rIndex: " + rIndex);
            Row row = sheet.getRow(rIndex);
            if (row != null) {
                Cell xenditId = row.getCell(0);
                Cell status = row.getCell(1);
                Cell type = row.getCell(2);
                Cell createdDate = row.getCell(3);
                Cell createdDateIso = row.getCell(5);
                Cell reference = row.getCell(6);
                Cell amount = row.getCell(9);
                Cell name = row.getCell(11);
                Cell bank_code = row.getCell(12);
                Cell accountNumber = row.getCell(13);


                Timestamp xenditTime = XenditCallBackTimeConvertUtil.convertXenditCallBackTime(String.valueOf(createdDate));
                Timestamp createTime = new Timestamp(System.currentTimeMillis());


                XenditBill xenditBill = new XenditBill(String.valueOf(xenditId), String.valueOf(status),
                        String.valueOf(type), String.valueOf(createdDate), String.valueOf(createdDateIso),
                        String.valueOf(reference), Double.parseDouble(amount.toString()), String.valueOf(name), String.valueOf(bank_code),
                        String.valueOf(accountNumber), xenditTime, createTime, null);


                xenditBillService.saveXenditBill(xenditBill);
            }

        }

2.解析.csv格式Excel表格

 运用FastDFS:

 @RequestMapping("/upload")
    public JsonResult uploadXenditExcel(MultipartFile file) {

        if (file.isEmpty()) {
            return JsonResult.buildError();
        }

        String filePath = "";
        try {
            filePath = fastDFSService.uploadFile(file.getInputStream(), file.getSize(), file.getOriginalFilename());
        } catch (Exception e) {
            log.error("[upload] 上传文件异常 e={}", e);
            return JsonResult.buildError();
        }
        //将filePath 存入数据库
        Timestamp time = new Timestamp(System.currentTimeMillis());

        FileUrl fileUrl = new FileUrl(file.getOriginalFilename(),filePath,time,time);
        xenditBillService.saveFileUrl(fileUrl);

        return JsonResult.buildSuccess(filePath);
    }

    /**
     * 分析xendit表,建立流水库
     *
     * @return
     */
    @RequestMapping("/analyseXendit")
    public JsonResult analyseXenditExcel() {

        //数据库查询最新的一条记录 path
        String path = xenditBillService.getLatestPath();
        byte[] fileByte = null;
        try {
            fileByte = fastDFSService.downloadFile(path);
        } catch (Exception e) {
            log.error("analyseXenditExcel 异常 e={}", e);
            return JsonResult.buildError();
        }
        String fileName = "xenditCvs".concat(Long.toString(System.currentTimeMillis()));

        File file = new File(this.filePath.concat("/").concat(fileName));

        if (file.exists()) {
            file.delete();
        }

        byte2File(fileByte, this.filePath, fileName);
        Boolean flag = true;
        try {
            ArrayList<String[]> csvFileList = new ArrayList<String[]>();
            CsvReader reader = new CsvReader(this.filePath.concat("/").concat(fileName), ',', Charset.forName("UTF-8"));

            reader.readHeaders();

            while (reader.readRecord()) {
                csvFileList.add(reader.getValues());
            }
            reader.close();

            for (int row = 0; row < csvFileList.size(); row++) {
                String type = csvFileList.get(row)[2];

                if ("DIRECT_DISBURSEMENT_CREATED".equals(type) || "VIRTUAL_ACCOUNT_SETTLEMENT".equals(type)) {
                    // 取得第row行第0列的数据
                    String xenditId = csvFileList.get(row)[0];
                    String status = csvFileList.get(row)[1];
                    String createdDate = csvFileList.get(row)[3];
                    String createdDateIso = csvFileList.get(row)[5];
                    String reference = csvFileList.get(row)[6];
                    String amount = csvFileList.get(row)[9];
                    String name = csvFileList.get(row)[11];
                    String bank_code = csvFileList.get(row)[12];
                    String accountNumber = csvFileList.get(row)[13];

                    Timestamp xenditTime = null;
                    if (StringUtils.isNotBlank(createdDateIso)) {
                        xenditTime = XenditCallBackTimeConvertUtil.convertXenditCallBackTime(createdDateIso);
                    }

                    Timestamp time = new Timestamp(System.currentTimeMillis());

                    XenditBill xenditBill = new XenditBill(xenditId, status, type, createdDate, createdDateIso,
                            reference, new BigDecimal(amount), name, bank_code, accountNumber, xenditTime, time, time);
                    xenditBillService.saveXenditBill(xenditBill);
                }
            }
        } catch (Exception e) {
            flag = false;
            log.error("analyseXendit error e={}", e);
        }
        return flag == true ? JsonResult.buildSuccess() : JsonResult.buildError();
    }


    private void byte2File(byte[] buf, String filePath, String fileName) {
        BufferedOutputStream bos = null;
        FileOutputStream fos = null;
        File file = null;
        try {
            File dir = new File(filePath);
            if (!dir.exists() && dir.isDirectory()) {
                dir.mkdirs();
            }
            file = new File(filePath + File.separator + fileName);
            fos = new FileOutputStream(file);
            bos = new BufferedOutputStream(fos);
            bos.write(buf);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    log.error("byte2File error e={}", e);
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    log.error("byte2File error e={}", e);
                }
            }
        }
    }

}

3.解析以上格式

代码:

public JsonResult getXenditBill(MultipartFile file) {


        Boolean flate = true;
        if (!file.isEmpty()) {
            try {
                File f = File.createTempFile("tmp", null);
                file.transferTo(f);
                f.deleteOnExit();
                BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
                reader.readLine();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    String item[] = line.split(",");


                    String type = item[2];
                    if ("DIRECT_DISBURSEMENT_CREATED".equals(type) || "VIRTUAL_ACCOUNT_SETTLEMENT".equals(type)) {
                        String xenditId = item[0];
                        String status = item[1];


                        String contact = item[3] + "," + item[4];
                        String createdDate = contact.substring(1, contact.length() - 1);


                        String createdDateIso = item[6];
                        String reference = item[7];
                        String amount = item[10];
                        String name = item[12];
                        String bank_code = item[13];
                        String accountNumber = item[14];


                        Timestamp xenditTime = XenditCallBackTimeConvertUtil.convertXenditCallBackTime(createdDateIso);
                        Timestamp time = new Timestamp(System.currentTimeMillis());


                        XenditBill xenditBill = new XenditBill(xenditId, status, type, createdDate, createdDateIso,
                                reference, Double.parseDouble(amount), name, bank_code, accountNumber, xenditTime, time, time);
                        xenditBillService.saveXenditBill(xenditBill);
                    }
                }
            } catch (Exception e) {
                flate = false;
                e.printStackTrace();
            }
        } else {
            flate = false;
        }
        return flate == true ? JsonResult.buildSuccess() : JsonResult.buildError();
    }
}


猜你喜欢

转载自blog.csdn.net/Alice_8899/article/details/79390027