Excel文档读取处理-poi

该代码示例展示了如何使用ApachePOI库处理xlsx文件,包括读取单元格的不同类型值(如日期、数值、公式),判断行是否为空,以及将数据转换为特定类型(如日期或数字)。主要功能集中在`getCellValueByCell`和`isRowEmpty`方法中。
摘要由CSDN通过智能技术生成
添加依赖
<dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>4.1.2</version>
            </dependency>
2007及2007以上,xlsx后缀,使用XSSFWorkbook获取工作簿对象
获取单元格各类型值,返回字符串类型
public String getCellValueByCell(Cell cell) {
        //判断是否为null或空串
        if (cell==null || cell.toString().trim().equals("")) {
            return "";
        }
        String cellValue = "";
        if (cell.getCellType()==CellType.NUMERIC) {
            short format = cell.getCellStyle().getDataFormat();
            if (DateUtil.isCellDateFormatted(cell)) {
                SimpleDateFormat sdf = null;
                if (format == 20 || format == 32) {
                    sdf = new SimpleDateFormat("HH:mm");
                } else if (format == 14 || format == 31 || format == 57 || format == 58) {
                    // 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
                    sdf = new SimpleDateFormat("yyyy-MM-dd");
                    double value = cell.getNumericCellValue();
                    Date date = DateUtil.getJavaDate(value);
                    cellValue = sdf.format(date);
                } else {// 日期
                    sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                }
                try {
                    cellValue = sdf.format(cell.getDateCellValue());// 日期
                } catch (Exception e) {
                    try {
                        throw new Exception("exception on get date data !".concat(e.toString()));
                    } catch (Exception e1) {
                        e1.printStackTrace();
                    }
                } finally{
                    sdf = null;
                }
            } else {
                BigDecimal bd = BigDecimal.valueOf(cell.getNumericCellValue());
                cellValue = bd.toPlainString();// 数值 用BigDecimal包装再获取plainString,可以防止获取到科学计数值
            }
        } else if (cell.getCellType()==CellType.STRING) {
            cellValue = cell.getStringCellValue();
        } else if (cell.getCellType()==CellType.BOOLEAN) {
            cellValue = cell.getBooleanCellValue()+"";
        } else if (cell.getCellType()==CellType.FORMULA) {
            cellValue = cell.getCellFormula();
        } else {
            cellValue = "";
        }
        //返回单元格值并去除首尾空格,去除数字最后解析出.0结尾
        if (cellValue.trim().endsWith(".0")) {
            return cellValue.trim().split("\\.0")[0];
        }
        return cellValue.trim();
    }

判断行是否为空

public boolean isRowEmpty(Row row) {
        for (int c = row.getFirstCellNum(); c < row.getLastCellNum(); c++) {
            Cell cell = row.getCell(c);
            if (cell != null && cell.getCellType() != CellType.BLANK) {
                return false;
            }
        }
        return true;
    }

测试

//读取第一个工作表
XSSFSheet sheet0 = xssfWorkbook.getSheetAt(0);
//判断工作表第一行是否为空
isRowEmpty(sheet0.getRow(0))
//读取第一行第一列数据
String data= getCellValueByCell(sheet0.getRow(0).getCell(0));
//转换成指定类型数据
Double.parseDouble(data);//数值类型
new SimpleDateFormat("yyyy-MM-dd").parse(data);//日期类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值