当前位置: 首页 > article >正文

【分享-POI工具,Excel字段取值容错小工具】

在使用POI导出Excel数据的时候这样

         FileInputStream inputStream = new FileInputStream(file);
        Workbook workbook = WorkbookFactory.create(inputStream);
        Sheet sheet = workbook.getSheetAt(0);
        for (Row row : sheet) {
			row.getCell(1).getStringCellValue();
			......
		}

row.getCell(1).getStringCellValue(); 这里是很容易报错的. 因为excel里的列格式即使设置为文本
当cell内的值是一个纯数字的时候, POI取到的还会是一个double类型的值. getStringCellValue(这个方法就会抛出类型不匹配的错误.)
为了解决这个常见问题. 写了这个工具类

public class ExcelUtil {
    public static String getCellValueString(Cell cell){
        if (cell != null) {
            switch (cell.getCellType()) {
                case STRING:
                    // 如果单元格内容是字符串类型
                    return cell.getStringCellValue();
                case NUMERIC:
                    // 如果单元格内容是数字类型
                    double numericValue = cell.getNumericCellValue();
                    return String.valueOf(numericValue); // 转为字符串后设置
                case BOOLEAN:
                    // 如果单元格内容是布尔值类型
                    boolean booleanValue = cell.getBooleanCellValue();
                    return String.valueOf(booleanValue); // 转为字符串后设置
                case FORMULA:
                    // 如果单元格是公式
                    String formulaValue = cell.getCellFormula();
                    return formulaValue; // 设置公式字符串
                default:
                    // 其他类型的处理(如空单元格)
                    return ""; // 设置为空字符串
            }
        } else {
            // 如果单元格为空
            return ""; // 设置为空字符串
        }

    }

    public static double getCellValueNumber(Cell cell){
        if (cell == null) {
            return -4; // 如果单元格为空,返回-1
        }
        switch (cell.getCellType()) {
            case STRING:
                try {
                    // 尝试将字符串转换为数字
                    return Double.parseDouble(cell.getStringCellValue());
                } catch (NumberFormatException e) {
                    // 如果字符串不能转换为数字,返回-1
                    return -1;
                }

            case NUMERIC:
                // 如果是数字类型,直接返回数字
                return cell.getNumericCellValue();

            case BOOLEAN:
                // 如果是布尔类型,true转换为1,false转换为0
                return cell.getBooleanCellValue() ? 1 : 0;

            case FORMULA:
                // 如果是公式类型,返回-1
                return -2;

            default:
                // 对于其他类型,返回-1
                return -3;
        }
    }
}

然后我们必须要从cell中取String类型就这样使用

ExcelUtil.getCellValueString(row.getCell(2));

取double类型就这样使用

ExcelUtil.getCellValueNumber(row.getCell(3));

避免excel总是自动转换或者用户输入错误造成的导入数据错误.


http://www.kler.cn/a/448084.html

相关文章:

  • Jenkins持续集成部署——jenkins安装
  • 读书笔记~管理修炼-缄默效应
  • 车载网关性能 --- 缓存buffer划分要求
  • JVM性能优化一:初识内存泄露-内存溢出-垃圾回收
  • 2024年港澳台华侨生联考师范类院校录取情况来
  • Mybatis中使用MySql触发器报错:You have an error in your SQL syntax; ‘DELIMITER $$
  • 基于Controller模式部署RocketMQ集群
  • 【蓝桥杯选拔赛真题96】Scratch风车旋转 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析
  • tomcat的安装以及配置(基于linuxOS)
  • centos集群部署seata
  • Mono里运行C#脚本1
  • arXiv-2024 | 当视觉语言导航遇见自动驾驶!doScenes:基于自然语言指令的人车交互自主导航驾驶数据集
  • 【hackmyvm】eigthy 靶机wp
  • 无人机视频传输系统的通信能耗优化
  • 拷贝构造和赋值运算符重载
  • 质量小议51 - 茧房
  • 主要模型记录
  • Ubuntu系统安装MySQL
  • GA-BP分类-遗传算法(Genetic Algorithm)和反向传播算法(Backpropagation)
  • java全栈day18--Web后端实战(java操作数据库2)
  • Linux export命令
  • Elasticsearch:什么是查询语言?
  • C++ 杨辉三角 - 力扣(LeetCode)
  • 如何制作搞笑配音视频?操作方法
  • 智能电商:API接口如何驱动自动化与智能化转型
  • Yolo11改进策略:主干网络改进|FastVit与Yolo11完美融合,重参数重构Yolo11网络(全网首发)