小秦哥 发表于 2024-8-6 12:55:43

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

        从指定路径的Excel文件中读取数据,跳过第一行(通常为标题行),并将每一行的数据映射到实体类对象的属性中。终极,将所有数据网络到列表中。
1、实体类代码
package com.code.boot.model;

import lombok.Data;

/**
* @Author: Gurucyy
* @date: 2024/03/2309:47:05
* @Description: EntityDto
*/
@Data
public class EntityDto {

    private String companyName; //企业名称

    private String plate; // 板块

    private String industry; // 行业

    private String companyCode; // 统一社会信用代码
}
2、实现方法
package com.code.boot.controller;

import org.apache.poi.ss.usermodel.*;
import java.io.FileInputStream;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class ExcelReader {

    // 从指定的Excel文件路径读取数据,并返回一个SuzhouDto列表
    private List<EntityDto> readExcelData(String excelFilePath) {
      List<EntityDto> entityDtosList = new ArrayList<>();
      try (FileInputStream fileInputStream = new FileInputStream(new File(excelFilePath));
             Workbook workbook = WorkbookFactory.create(fileInputStream)) {
            Sheet sheet = workbook.getSheetAt(0);
            boolean isFirstRow = true;

            for (Row row : sheet) {
                if (isFirstRow) {
                  isFirstRow = false;
                  continue; // 跳过第一行(标题行)
                }
                EntityDto entityDto = new EntityDto();
                entityDto.setCompanyName(getCellValue(row.getCell(0)));
                entityDto.setPlate(getCellValue(row.getCell(1)));
                entityDto.setIndustry(getCellValue(row.getCell(2)));
                entityDto.setCompanyCode(getCellValue(row.getCell(3)));
                entityDtosList.add(entityDto);
            }
      } catch (Exception e) {
            // 根据自己需求,实现自定义异常处理机制
            e.printStackTrace();
      }
      return entityDtosList;
    }

    // 根据单元格类型获取单元格的值
    private String getCellValue(Cell cell) {
      if (cell == null) {
            return "";
      }
      switch (cell.getCellType()) {
            case STRING:
                return cell.getStringCellValue();
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                  // 可选:将日期转换为格式化的日期字符串
                  return cell.getDateCellValue().toString();
                } else {
                  return Double.toString(cell.getNumericCellValue());
                }
            case BOOLEAN:
                return Boolean.toString(cell.getBooleanCellValue());
            case FORMULA:
                return cell.getCellFormula();
            default:
                return "";// 对于空白和其他类型
      }
    }

    // todo 如果想将所有类型的单元格统一转换为字符串类型,注释掉上面的getCellValue方法,调用该方法即可
    //private String getCellValue(Cell cell) {
    //    if (cell == null) {
    //      return "";
    //    }
    //    cell.setCellType(CellType.STRING);
    //    return cell.getStringCellValue();
    //}
} 3、根据终极返回的entityDtosList列表,使用MyBatisPlus的批量插入方法或其他方法,将数据保存到数据库。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Java读取Excel文件并写入数据库