Java读取Excel文件并写入数据库

打印 上一主题 下一主题

主题 853|帖子 853|积分 2559

        从指定路径的Excel文件中读取数据,跳过第一行(通常为标题行),并将每一行的数据映射到实体类对象的属性中。终极,将所有数据网络到列表中。
1、实体类代码
  1. package com.code.boot.model;
  2. import lombok.Data;
  3. /**
  4. * @Author: Gurucyy
  5. * @date: 2024/03/23  09:47:05
  6. * @Description: EntityDto
  7. */
  8. @Data
  9. public class EntityDto {
  10.     private String companyName; //企业名称
  11.     private String plate; // 板块
  12.     private String industry; // 行业
  13.     private String companyCode; // 统一社会信用代码
  14. }
复制代码
2、实现方法
  1. package com.code.boot.controller;
  2. import org.apache.poi.ss.usermodel.*;
  3. import java.io.FileInputStream;
  4. import java.io.File;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. public class ExcelReader {
  8.     // 从指定的Excel文件路径读取数据,并返回一个SuzhouDto列表
  9.     private List<EntityDto> readExcelData(String excelFilePath) {
  10.         List<EntityDto> entityDtosList = new ArrayList<>();
  11.         try (FileInputStream fileInputStream = new FileInputStream(new File(excelFilePath));
  12.              Workbook workbook = WorkbookFactory.create(fileInputStream)) {
  13.             Sheet sheet = workbook.getSheetAt(0);
  14.             boolean isFirstRow = true;
  15.             for (Row row : sheet) {
  16.                 if (isFirstRow) {
  17.                     isFirstRow = false;
  18.                     continue; // 跳过第一行(标题行)
  19.                 }
  20.                 EntityDto entityDto = new EntityDto();
  21.                 entityDto.setCompanyName(getCellValue(row.getCell(0)));
  22.                 entityDto.setPlate(getCellValue(row.getCell(1)));
  23.                 entityDto.setIndustry(getCellValue(row.getCell(2)));
  24.                 entityDto.setCompanyCode(getCellValue(row.getCell(3)));
  25.                 entityDtosList.add(entityDto);
  26.             }
  27.         } catch (Exception e) {
  28.             // 根据自己需求,实现自定义异常处理机制
  29.             e.printStackTrace();
  30.         }
  31.         return entityDtosList;
  32.     }
  33.     // 根据单元格类型获取单元格的值
  34.     private String getCellValue(Cell cell) {
  35.         if (cell == null) {
  36.             return "";
  37.         }
  38.         switch (cell.getCellType()) {
  39.             case STRING:
  40.                 return cell.getStringCellValue();
  41.             case NUMERIC:
  42.                 if (DateUtil.isCellDateFormatted(cell)) {
  43.                     // 可选:将日期转换为格式化的日期字符串
  44.                     return cell.getDateCellValue().toString();
  45.                 } else {
  46.                     return Double.toString(cell.getNumericCellValue());
  47.                 }
  48.             case BOOLEAN:
  49.                 return Boolean.toString(cell.getBooleanCellValue());
  50.             case FORMULA:
  51.                 return cell.getCellFormula();
  52.             default:
  53.                 return "";  // 对于空白和其他类型
  54.         }
  55.     }
  56.     // todo 如果想将所有类型的单元格统一转换为字符串类型,注释掉上面的getCellValue方法,调用该方法即可
  57.     //private String getCellValue(Cell cell) {
  58.     //    if (cell == null) {
  59.     //        return "";
  60.     //    }
  61.     //    cell.setCellType(CellType.STRING);
  62.     //    return cell.getStringCellValue();
  63.     //}
  64. }
复制代码
3、根据终极返回的entityDtosList列表,使用MyBatisPlus的批量插入方法或其他方法,将数据保存到数据库。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小秦哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表