Excel解析返回字符串

对Excel文件进行解析

我使用的是springboot,maven项目结构,首先需要引入jar包,直接在pom中引入POI,版本最好一致,不然可能会报错。

		<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.9</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.9</version>
        </dependency>

接下来就是核心代码,很简单的,这是我写的解析Excel的工具类,fileName是文件路径,我这里没有对Excel的sheet进行循环读取,因为我的项目中不需要,数据都是在sheet1,有需要的可以直接写成循环读取。由于我返回的是string类型字符串,所以这里使用了StringUtils进行转码,只需要在pom引入comm-lang3的jar包即可使用。

public static String upExcel(String fileName) {
        Workbook workbook = readExcel(fileName);
        //获得sheet的数量(sheet的index是从0开始的)
        int sheetCount = workbook.getNumberOfSheets();
        String excels = new String();
        //遍历Sheet
        //创建list存储
        ArrayList<String> list = new ArrayList<>();
        //得到Sheet
        Sheet sheet = workbook.getSheetAt(0);
        //得到每个Sheet的行数,此工作表中包含的最后一行(Row的index是从0开始的)
        int rowCount = sheet.getLastRowNum();
        //遍历Row
        for (int j = 1; j <= rowCount; j++) {
            //得到Row
            Row row = sheet.getRow(j);
            if (row == null) {
                continue;
            }
            //创建string用于拼接值
            String str = new String();
            //得到每个Row的单元格数
            int cellCount = row.getLastCellNum();
            //获取每个单元格的值
            for (int k = 0; k < cellCount; k++) {
                Cell cell = row.getCell(k);
                Object value = getCellFormatValue(cell);
                if (value.equals("")||value == null)value = "0";
                if (str.length() == 0) {
                    str = String.valueOf(value);
                } else {
                    str = str + " " + String.valueOf(value);
                }
            }
            list.add(str);
        }
        excels = StringUtils.join(list, "\n");
        return excels;
    }


    /**
     * 根据文件地址,解析后缀返回不同的Workbook对象
     *
     * @param filePath 文件地址
     * @return Excel文档对象Workbook
     */
    public static Workbook readExcel(String filePath) {

        if (filePath == null || filePath.equals("")) {
            return null;
        }
        //得到文件后缀
        String suffix = filePath.substring(filePath.lastIndexOf("."));
        System.out.println(suffix);
        try {
            InputStream is = new FileInputStream(filePath);
            if (".xls".equals(suffix)) {
                return new HSSFWorkbook(is);
            }
            if (".xlsx".equals(suffix)) {
                return new XSSFWorkbook(is);
            }
            return null;

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取Excel的值
     * @param cell
     * @return
     */
    public static Object getCellFormatValue(Cell cell) {
        Object cellValue;
        if (cell != null) {
            //判断cell类型
            switch (cell.getCellType()) {
                //空值单元格
                case Cell.CELL_TYPE_BLANK: {
                    cellValue = "";
                    break;
                }
                //数值型单元格 getNumericCellValue()以数字形式获取单元格的值。
                case Cell.CELL_TYPE_NUMERIC: {
                    //判断cell是否为日期格式
                    if (DateUtil.isCellDateFormatted(cell)) {
                        //转换为日期格式YYYY-mm-dd
                        //cellValue = cell.getDateCellValue();
                        Date date = cell.getDateCellValue();
                        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        cellValue = dateFormat.format(date);
                    } else {
                        //数字
                        System.out.println("数字格式");
                        cellValue = cell.getNumericCellValue();
                    }
                    break;
                }
                //公式型单元格getCellFormula()返回单元格的公式
                case Cell.CELL_TYPE_FORMULA: {
                    cellValue = String.valueOf(cell.getNumericCellValue());
                    break;
                }
                //字符串单元格
                case Cell.CELL_TYPE_STRING: {
                    cellValue = cell.getRichStringCellValue().getString();
                    break;
                }
                //布尔值型单元格
                case Cell.CELL_TYPE_BOOLEAN: {
                    cellValue = String.valueOf(cell.getBooleanCellValue());
                    break;
                }
                default:
                    cellValue = "";
            }
        } else {
            cellValue = "";
        }
        return cellValue;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值