Evil Mouth's Blog

使用POI读写Excel

May 27, 2017

比较出名的两个方案 jxi 和 poi,由于 jxi 只适用 Excel 2003,所以肯定选择 poi,但是 poi 又跟 android 不兼容,不能通过 maven 依赖方式拉取,所以只能自己重新打包 jar 文件并导入到项目中才可以使用,在网上找了下找到个 3-12 版的,现在官网最新的是 3-16,不过之前由于急着弄这个功能就没管了,后面找个时间自己打包下,jar 包可以在下面链接找到

https://github.com/izyhang/ExcelPoi

读写 Excel

读写操作还是很常规的

InputStream is = new FileInputStream(filePath);
Workbook wookbook = new XSSFWorkbook(is);//Excel 2007
Sheet sheet = wookbook.getSheetAt(0);
Row row = sheet.getRow(0);
Cell cell = row.getCell(0);
...

取单元格内容

private static String getCellFormatValue(Cell cell) throws Exception {
        String value = "";
        // 判断当前Cell的Type
        switch (cell.getCellType()) {
            // 如果当前Cell的Type为NUMERIC
            case Cell.CELL_TYPE_NUMERIC:
                // 判断当前的cell是否为Date
                if (HSSFDateUtil.isCellDateFormatted(cell)) {
                    // 方法2:这样子的data格式是不带带时分秒的:2011-10-12
                    double date = cell.getNumericCellValue();
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm", Locale.CHINA);
                    value = sdf.format(HSSFDateUtil.getJavaDate(date));
                } else {
                    // 如果是纯数字通过NumberToTextConverter.toText(double)将double转成string
                    value = NumberToTextConverter.toText(cell.getNumericCellValue());
                }
                break;
            // 如果当前Cell的Type为STRING
            case Cell.CELL_TYPE_STRING:
                // 取得当前的Cell字符串
                value = cell.getStringCellValue();
                break;
            // 如果当前Cell的Type为BOOLEAN
            case Cell.CELL_TYPE_BOOLEAN:
                value = String.valueOf(cell.getBooleanCellValue());
                break;
        }
        return value;
    }

这里读纯数字用的是NumberToTextConverter.toText,具体看实际需求

— Evil Mouth