将excel插入到java对象的一些重要方法

先说一些方法

在Apache POI库中,CellType.STRING是用于定义Excel单元格数据类型的一个枚举值。Apache POI是一个流行的Java库,用于处理Microsoft Office文档,特别是Excel文件(如.xls和.xlsx格式)。CellType枚举定义了单元格可以持有的不同类型的数据,这些类型包括:

  • STRING:表示单元格包含文本字符串。
  • NUMERIC:表示单元格包含数字(无论是整数、浮点数还是日期时间值)。
  • FORMULA:表示单元格包含一个公式。
  • BLANK:表示单元格为空(但不同于null,因为它仍然是一个单元格,只是没有值)。
  • BOOLEAN:表示单元格包含布尔值(true或false)。
  • ERROR:表示单元格包含错误(如#DIV/0!)。
  1. getCell(0):这部分代码从当前行(Row对象)中获取索引为0的单元格(Cell对象)。在Excel中,索引通常是从0开始的,所以getCell(0)获取的是第一列的第一个单元格。

  2. .getStringCellValue():这部分代码是调用Cell对象上的一个方法,用于获取单元格中的字符串值。然而,重要的是要注意,在调用.getStringCellValue()之前,你应该确认单元格的类型确实是CellType.STRING,否则可能会遇到IllegalStateException。这是因为Apache POI要求你以正确的方式访问单元格的数据,即你需要根据单元格的实际类型来调用相应的方法来获取其值。

如果单元格不是字符串类型,但你却调用了.getStringCellValue(),Apache POI会尝试将单元格的内容转换为字符串(如果可能的话),但这并不总是你想要的,特别是当单元格实际上包含数字、日期或公式时。对于非字符串类型的单元格,你应该使用以下方法之一来获取其值:

  • 对于数字类型,使用.getNumericCellValue()
  • 对于日期时间类型(在Excel中存储为数字),你可能需要先使用.getDateCellValue()(但注意这可能会返回Java的Date对象,这在处理Excel日期时可能不是最理想的方式),或者更常见的是,使用.getNumericCellValue()结合DateUtil类来解析日期。
  • 对于布尔类型,使用.getBooleanCellValue()
  • 对于公式类型,如果你想要公式的结果(而不是公式本身),你需要先评估公式(这通常涉及到更复杂的操作),但如果你只是想要公式作为字符串,你可以使用.getCellFormula()

如果你不确定单元格的类型,可以先调用.getCellType()来检查它,然后根据类型调用相应的方法来获取值。此外,Apache POI还提供了一种便捷的方法.getRichStringCellValue(),它可以处理包含富文本(如不同字体或颜色)的单元格,但请注意,这仍然要求单元格本质上是字符串类型或可以转换为字符串。

eg:

先用HSSFWorkbook读取excel文件内容,这里假设是.xls文件
dyx = new HSSFWorkbook(file.getInputStream());

读取第一个(工作单)sheet的数据
HSSFSheet sheet = dyx.getSheetAt(0);

初始化一个实体类集合,用于存储excel的内容

List<dyxOptionDO> importDatas = new ArrayList<>();

循环sheet页中数据从第二行开始,假设第一行是标题

HSSFRow row = null;
for (int i = 1; i < sheet.getPhysicalNumberOfRows(); i++) {
//获取每一行数据
row = sheet.getRow(i);
//在循环体内,首先检查每一行的每个关键单元格是否为空,并据此抛出GenericException异常:
 if (row.getCell(0) == null) {
        throw new GenericException("dict_code不能为空!");
    }
    if (row.getCell(1) == null) {
        throw new GenericException("option_value不能为空!");
    }
    if (row.getCell(2) == null) {
        throw new GenericException("option_name不能为空!");
    }
    if (row.getCell(9) == null) {
        throw new GenericException("create_user不能为空!");
    }
    //创建对象,准备为该对象设置参数
    dyxOptionDO data = new dyxOptionDO();
    row.getCell(0).setCellType(CellType.STRING);
    row.getCell(1).setCellType(CellType.STRING);
    row.getCell(2).setCellType(CellType.STRING);
    if (row.getCell(5) != null) {
        row.getCell(5).setCellType(CellType.STRING);
    }
    if (row.getCell(6) != null) {
        row.getCell(6).setCellType(CellType.STRING);
    }
    if (row.getCell(7) != null) {
        row.getCell(7).setCellType(CellType.STRING);
    }
    if (row.getCell(8) != null) {
        row.getCell(8).setCellType(CellType.STRING);
    }
    if (row.getCell(9) != null) {
        row.getCell(9).setCellType(CellType.STRING);
    }
    if (row.getCell(10) != null) {
        row.getCell(10).setCellType(CellType.STRING);
    }
    if (row.getCell(13) != null) {
        row.getCell(13).setCellType(CellType.STRING);
    }
    if (row.getCell(14) != null) {
        row.getCell(14).setCellType(CellType.STRING);
    }
    if (row.getCell(3) != null) {
        row.getCell(3).setCellType(CellType.NUMERIC);
    }
    if (row.getCell(4) != null) {
        row.getCell(4).setCellType(CellType.NUMERIC);
    }
    if (row.getCell(11) != null) {
        row.getCell(11).setCellType(CellType.NUMERIC);
    }
    if (row.getCell(12) != null) {
        row.getCell(12).setCellType(CellType.NUMERIC);
    }
    data.setDictCode(row.getCell(0).getStringCellValue());
    data.setOptionValue(row.getCell(1).getStringCellValue());
    data.setOptionName(row.getCell(2).getStringCellValue());
    data.setOptionParentId(row.getCell(3) == null ? null : Integer.valueOf((int) row.getCell(3).getNumericCellValue()));
    data.setOptionIndex(row.getCell(4) == null ? null : Integer.valueOf((int) row.getCell(4).getNumericCellValue()));
    data.setOptionNameEn(row.getCell(5) == null ? null : row.getCell(5).getStringCellValue());
    data.setOptionNameExtend(row.getCell(6) == null ? null : row.getCell(6).getStringCellValue());
    data.setOptionValueExtend(row.getCell(7) == null ? null : row.getCell(7).getStringCellValue());
    data.setOptionIndexExtend(row.getCell(8) == null ? null : row.getCell(8).getStringCellValue());
    data.setCreateUser(row.getCell(9) == null ? null : row.getCell(9).getStringCellValue());
    data.setUpdateUser(row.getCell(10) == null ? null : row.getCell(10).getStringCellValue());
    data.setIsDelete(row.getCell(11) == null ? null : Byte.valueOf((byte) row.getCell(11).getNumericCellValue()));
    data.setParentId(row.getCell(12) == null ? null : Integer.valueOf((int) row.getCell(12).getNumericCellValue()));
    data.setParentCode(row.getCell(13) == null ? null : row.getCell(13).getStringCellValue());
    data.setParentValue(row.getCell(14) == null ? null : row.getCell(14).getStringCellValue());
    importDatas.add(data);
}

//循环校验并存入数据库
for (dyxOptionDO imdata : importDatas) {
    dyxMapper.insertSelective(imdata);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值