项目实战 Java读取Excel数据

  • 前言
  • 实现步骤
    • 导入POI依赖
    • 示例Excel表结构
    • 编写读取Excel工具类
      • 实现思路
      • 读取Excel数据工具类实现代码
    • 取出从excel中获取的数据,并插入到数据库中
  • 总结
  • 如果博主的文章对您有所帮助,可以评论、点赞、收藏,支持一下博主!!!

前言

最近项目需要增加一个功能,上传Excel表格进行批量导入。通过上传Excel表格的方式能够节省用户大量的时间提高用户的体验。博主查阅了相关资料,最终是成功实现了上传Excel表格进行批量导入。
本篇博客记录了上传Excel到读取Excel再到将读取到的数据插入到数据库的详细步骤,通过本篇博客可以成功实现读取Excel数据进行批量导入。

实现步骤

实现步骤主要分为两步:

  1. 从Excel表中读取数据
  2. 将获取到的数据插入到数据库中

导入POI依赖

注意:本篇博客是使用引入POI依赖的方式实现读取excel的数据

     <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version></dependency>

示例Excel表结构

编写读取Excel工具类

实现思路

  1. POI读取是 先读行,再循环获取每列的信息。
  2. 另外一点需要注意的是,从示例的Excel表结构中可以看出我们实际上需要的数据是从第三行开始。所以行的循环从第三行开始,如:
// sheet.getPhysicalNumberOfRows()获取总的行数
//i=2从第三行开始循环
for (int i = 2; i < sheet.getPhysicalNumberOfRows(); i++) {}
  1. 在行循环中获取每一格的数据,进行数据收集。
     // 循环读取每一个格Row row = sheet.getRow(i);//用于收集excel中的数据Map<String,String> studentDate =new HashMap<>();

读取Excel数据工具类实现代码

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @author : [WangWei]* @version : [v1.0]* @className : ReadPatientExcelUtil* @description : [从Excel表中读取学生数据]* @createTime : [2022/11/13 22:28]* @updateUser : [WangWei]* @updateTime : [2022/11/13 22:28]* @updateRemark : [描述说明本次修改内容]*/
public class ReadStudentDateExcelUtil {public static List<Map<String ,String>> readStudentDate(MultipartFile file){//用于获取Excel中的数据List<Map<String ,String>> studentDateList=new ArrayList<>();//获取的是文件的完整名称,包括文件名称+文件拓展名String path=file.getOriginalFilename();try {/*// 如果需要通过URL获取资源的加上以下的代码,不需要的省略就行URL url = new URL(strURL);HttpURLConnection conn = (HttpURLConnection)url.openConnection();// 设置超时间为3秒conn.setConnectTimeout(3*1000);// 防止屏蔽程序抓取而返回403错误conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");// 获取输入流InputStream inputStream = conn.getInputStream();......*/// 也可以通过文件路径获取文件流//InputStream inputStream = new FileInputStream("D://");// 获取文件输入流InputStream inputStream = file.getInputStream();// 定义一个org.apache.poi.ss.usermodel.Workbook的变量Workbook workbook = null;// 截取路径名 . 后面的后缀名,判断是xls还是xlsxif (path.substring(path.lastIndexOf("." )+1).equals("xls")){workbook = new HSSFWorkbook(inputStream);}else if (path.substring(path.lastIndexOf(" . " )+1).equals("xlsx")){workbook = new XSSFWorkbook(inputStream);} else {throw new Exception("上传文件格式错误");}// 获取名为学生信息的sheet页Sheet sheet = workbook.getSheet("学生信息");// sheet.getPhysicalNumberOfRows()获取总的行数for (int i = 2; i < sheet.getPhysicalNumberOfRows(); i++) {Map<String,String> studentDate =new HashMap<>();// 循环读取每一个格Row row = sheet.getRow(i);studentDate.put("code",row.getCell(0).toString());studentDate.put("name",row.getCell(1).toString());studentDate.put("sex",row.getCell(2).toString());studentDate.put("identityCardId",row.getCell(3).toString());studentDate.put("nation",row.getCell(4).toString());studentDate.put("entranceDate",row.getCell(5).toString());studentDate.put("academyName",row.getCell(6).toString());studentDate.put("professionName",row.getCell(7).toString());studentDate.put("className",row.getCell(8).toString());studentDateList.add(studentDate);}} catch (Exception e) {e.printStackTrace();}return studentDateList;}

按照上述代码就可以实现从excel表格中读取数据了

取出从excel中获取的数据,并插入到数据库中

先获取到excel中所有的数据,再通过for循环的方式将数据取出,set到实体中,最后插入到数据库中。

下面的代码不完整,也较为简单。只是起到一个示例的作用。

示例:

     //得到从Excel中获取所有数据List<Map<String ,String>> studentDateList= ReadStudentDateExcelUtil.readStudentDate(excelFile);//获取学院名for (Map<String ,String> map:studentDateList) {//实例化一个学院实体AcademyEntity academyEntity=new AcademyEntity();//获取到学院的名称academyEntity.setName(map.get("academyName"));}//最后插入到数据库中

示例实体:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;@Entity
@Table(name =  "tt_academy")
public class AcademyEntity extends BaseAttribute {@Column(name = "name")private String name;/*** 机构代码*/@Column(name = "code")private String code;@Column(name = "type")private String type;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getType() {return type;}public void setType(String type) {this.type = type;}
}

总结

最开始的时候由于没有接触过通过上传excel表格的方式进行批量导入,所以一开始就有些恐惧,心态有些不好。当真正做完整个需求的时候,发现其实也还是挺简单的,自己努努力还是可以完成的。

收获:1.分解问题:最开始的时候总是想着一口气解决,所以开始在搜索引擎上搜索的关键字是“java 实现excel批量导入”,对于我来说这样搜索带来的后果是看相关资料时内容太多了,无法聚焦,吸收不了。之后自己发现了自己出现了这个问题,之后调整了策略,进行问题的分解,想要实现上传excel表格的方式进行批量导入,第一步:从excel中读取数据。第二步:获取读取到的数据最后插入数据库。再通过搜索引擎查阅关键字如:“java 读取excel数据”

如果博主的文章对您有所帮助,可以评论、点赞、收藏,支持一下博主!!!

项目实战 Java读取Excel数据相关推荐

  1. Java读取Excel数据:基于Apache POI(一)

    Java读取Excel数据:基于Apache POI(一) Java本身不支持直接读取微软的Excel表格数据.第三方的Apache提供了一个库POI用以支持Java读写Excel表格数据. 首先需要 ...

  2. JAVA读取Excel数据

    JAVA读取Excel数据 下载 jxl.jar 导入jxl.jar 读取程序 写入Excel 写入txt 下载 jxl.jar 找到一个博主发的,下载好后去掉.zip后缀 jxl.jar下载 - 天 ...

  3. java 读取Excel数据(POI)(一个sheet或者多个sheet)

    1.添加依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml< ...

  4. java读取excel数据_Java读取Excel内容(转)

    借助于apathe的poi.jar,由于上传文件不支持.jar所以请下载后将文件改为.jar,在应用程序中添加poi.jar包,并将需要读取的excel文件放入根目录即可 本例使用java来读取exc ...

  5. java读取excel数据的方法是_java怎么读取excel文件里的数据

    展开全部 下面是一个简单的读取例子,如果报"java.io.IOException: Invalid header signature; read 4503608217567241, exp ...

  6. java 读取excel数据

    本文共介绍两种方式,第一种是常规POI读取,第二种是大文件读取. 依赖包 <poi.version>4.1.2</poi.version><!-- excel工具 --& ...

  7. 项目实战01-openpyxl读取Excel

    前言:为什么要使用openpyxl? 1.openpyxl是用来读取excel中的测试用例到代码中 2.DDT数据驱动 一.测试用例维护 1.测试用例均维护在Excel文件中,每个sheet页中存放单 ...

  8. elasticSearch的基本使用加项目实战(Java爬取数据+elasticSearch)

    一.es的安装 2.1.Es安装 为了避免出现不必要的一些问题, 我们这里选择 7.3.1版本 1. 安装es 下载 https://www.elastic.co/downloads/past-rel ...

  9. JAVA读取excel数据(插入oracle数据库)

    本实例做的是读取execl(只能读取.xls的execl,即只能读取03版的),如果是.xlsx类型的话 手工转化一下即可,应用的jar包是apache的poi系类的jar包和ojdbc14.jar的 ...

最新文章

  1. Codeforces Round #359 (Div. 2) C. Robbers' watch 暴力枚举
  2. TensorFlow Dropout
  3. java性能调优工具--笔记
  4. 数据字典简单例子_Python学习100天-Day14(数据分析篇-pandas02)
  5. Python 实现网络爬虫小程序
  6. WCF并存Asp.net
  7. mysql为何500w拆表_【mysql】MySQL 单表500W+数据,查询超时,如何优化呢?
  8. [原创]Installshield工具介绍
  9. 韩顺平java作业题_韩顺平java作业
  10. 计算机五笔打字口诀,快速学五笔打字技巧口决及方法
  11. python实现KNN分类算法(鸢尾花数据集)
  12. pv ip uv区别
  13. error_page 详解
  14. 同城容灾、异地容灾、 双活 数据中心、 两地三中心的区别
  15. oppo便签误删怎么办_oppo手机便签误删怎么办?oppo便签如何导入新手机
  16. 重新加载script
  17. 基于python的数据爬取与分析_基于Python的网站数据爬取与分析的技术实现策略
  18. 阿里云oss文件服务器
  19. 玲珑学院 1127 咸鱼文章
  20. 外连接 及 无用的外连接

热门文章

  1. 一个大圆,内切四个小圆,求阴影面积
  2. SegGPT: Segmenting Everything In Context
  3. Tkinter之place所有属性详解
  4. 剑网三体服服务器没显示,剑网3体验服安装说明及步骤 教你完成体服安装
  5. fullcalendar日历插件使用手册
  6. 随机图片壁纸API接口 刷新网页换背景接口
  7. 社会心理学(1) 社会心理学的定义
  8. python随机红包怎么发_python生成随机红包的实例写法
  9. 防火墙详解(二)通过网页登录配置华为eNSP中USG6000V1防火墙
  10. Android Mac下安装Apk到模拟器上