在企业级项目开发中,要经常涉及excel文件和程序之间导入导出的业务要求,那么今天来讲一讲excel文件导入的实现。java实现对excel的操作有很多种方式,例如EasyExcel等,今天我们使用的是POI技术实现excel文件的导入。

POI技术简介

1.POI概念

Apache POI 是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文件。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“简洁版的模糊实现”。

官网地址:

https://poi.apache.org/components/index.html

2.POI坐标依赖


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

3.POI核心API概述

3.1 创建工作簿对象

Workbook workbook=new XSSFWorkbook(path)

3.2 获取execl表中的sheet对象

Sheet sheet = workbook.getSheetAt(0);

3.3 获取excel文件中所有物理数据的有效行数

int rows = sheet.getPhysicalNumberOfRows()

3.4 获取行对象

Row row =sheet.getRow(i)

3.5 获取行中的列对象

Cell cell=row.getCell(0)

3.6 获取列的字符串类型数据

cell.getStringCellValue()

3.7 获取列的数字类型字段数据

cell.getNumericCellValue()

POI技术使用

1.需求分析

从一个准备好的Excel表格文件中读取学生信息,然后将学生的信息通过POI技术导入到数据库的学生表中。

2.实现思路

以下是具体的实现思路:

  • 准备excel文件,里面存储若干学生信息:包含学生姓名、年龄和手机号;

  • 创建web项目,导入相关jar依赖;

  • 创建数据库并创建一张学生表;

  • 使用POI读取文件的学生信息;

  • 将获取到的学生信息封装到学生对象;

  • 通过JDBC技术将学生信息保存到学生表。

3.案例实现

3.1 准备学生信息的excel文件

我们先创建一个student.xlsx文件

3.2 创建web项目,导入jar依赖

pom.xml核心依赖如下:

<!-- POI依赖坐标 -->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version>
</dependency>
<!-- servlet -->
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope>
</dependency>
<!-- 数据库相关 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version>
</dependency>
<!--c3p0-->
<dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5</version>
</dependency>
<!-- dbutils -->
<dependency><groupId>commons-dbutils</groupId><artifactId>commons-dbutils</artifactId><version>1.7</version>
</dependency>
</dependencies>

3.3 创建数据库并创建一张学生表

#创建学生数据库
CREATE DATABASE studb;
#创建学生表
CREATE TABLE `student` (`id` INT(11) NOT NULL AUTO_INCREMENT,`sname` VARCHAR(30) DEFAULT NULL,`age` INT(11) DEFAULT NULL,`phone` VARCHAR(20) DEFAULT NULL,PRIMARY KEY (`id`)
)

3.4 创建Student实体类

package com.qf.pojo;public class Student {private Integer id;private String sname;private Integer age;private String phone;public Student(String sname, Integer age, String phone) {this.sname = sname;this.age = age;this.phone = phone;}public Student(Integer id, String sname, Integer age, String phone) {this.id = id;this.sname = sname;this.age = age;this.phone = phone;}public Student() {}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}@Overridepublic String toString() {return "Student{" +"id=" + id +", sname='" + sname + '\'' +", age=" + age +", phone='" + phone + '\'' +'}';}
}

3.5 创建StudentServlet

@WebServlet("/student")
public class StudentServlet extends BaseServlet{private StudentService studentService=new StudentService();/*POI导入学生信息*/public void poiImport(HttpServletRequest request,HttpServletResponse response){System.out.println("POI导入学生信息");String path="D:\\ssm\\students.xlsx";try {//创建工作表对象Workbook workbook=new XSSFWorkbook(path);//获取目标sheetSheet sheet = workbook.getSheetAt(0);//获取sheet数据总行数int rows = sheet.getPhysicalNumberOfRows();//获取sheet中所有数据for (int i = 1; i < rows; i++) {//获取当前行对象Row row = sheet.getRow(i);String sname = row.getCell(0).getStringCellValue();//姓名double value = row.getCell(1).getNumericCellValue();//年龄Integer age = (int)value;double tel = row.getCell(2).getNumericCellValue();//手机号BigDecimal bigDecimal=new BigDecimal(tel);String phone = bigDecimal.toString();//将获取的数据封装到学生对象Student student=new Student(sname,age,phone);//将数据保存数据库表studentService.insertStudent(student);}System.out.println("POI导入学生信息完毕!");response.setContentType("text/html;charset=utf-8");response.getWriter().write("POI导入学生信息完毕!");} catch (Exception e) {e.printStackTrace();}}
}

3.6 创建StudentService

public class StudentService {private StudentDao studentDao=new StudentDao();/*增加学生*/public int insertStudent(Student s){return   studentDao.addStudent(s);}
}

3.7 创建StudentDao

public class StudentDao extends BaseDao<Student> {/*增加学生*/public int addStudent(Student s){String sql="insert into `student` ( `sname`, `age`, `phone`) values (?,?,?)";return update(sql, s.getSname(), s.getAge(), s.getPhone());}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>POI使用</title>
</head>
<body>
<h2>POI导入数据</h2>
<a href="student?key=poiImport">导入学生信息</a>
</body>
</html>

4.效果图示例

首页效果如下图:

导入成功提示:

导入成功后学生表:

至此,我们就实现了POI导入excel文件的操作,当然还有一些更复杂的操作在这里没有展开,例如导入excel中的部分行、部分列的数据,以及导出数据到excel等操作。

如何优雅的用POI导入Excel文件相关推荐

  1. web端实现表单提交poi导入excel文件

    <!--虎牌导入会员数据--> <a class="btn btn-primary btn-sm search-btn btn-wide btn-scroll btn-sc ...

  2. POI导入Excel文件(包含.xsl和.xslx文件兼容问题)

    导入文件这里,分为了几个部分: 第一步是读取文件,若未读取到文件,直接返回读取失败信息: 第二步是读取到文件后,进行校验,若不是excel文件,返回文件格式错误,读取失败信息: 第三步是读取sheet ...

  3. poi 导入excel文件,日期格式的处理。

    poi 定时任务导入excel到数据库 花费了一些时间是现实定时任务下excel文件的定时导入功能,因为放入的文件excel格式不一样,所以可以自定义枚举,与对应的文件名进行区分. poi 版本是4. ...

  4. POI 导入excel文件( 一 )

    0.介绍 Apache POI 是基于 Office Open XML 标准(OOXML)和 Microsoft 的 OLE 2 复合文档格式(OLE2)处理各种文件格式的开源项目. 简而言之,您可以 ...

  5. 使用poi导入Excel文件兼容性问题,The supplied data appears to be in the OLE2 Format.

    今天在处理Excel文件时候,发现对于以xls和xlsx为后缀的文件,用以下的代码处理时候抛 The supplied data appears to be in the OLE2 Format.异常 ...

  6. java的poi导入Excel文件

    首先看看前台写法: <form action="poi/upload.do" method="post" enctype="multipart/ ...

  7. java excel导入兼容性,使用poi导入Excel文件兼容性问题

    一言不合先抛个异常 org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in ...

  8. Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)

    ava 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包) 假设现在要做一个通用的导入方法: 要求: 1.xml的只定义数据库表中的column字段,字段类型,是否非空等条件 ...

  9. springboot中使用poi导出excel文件(亲测实现了第一个功能)

    1.POI简介 Jakarta POI 是一套用于访问微软格式文档的Java API. 组件HWPF用于操作Word的; 组件HSSF用于操作Excel格式文件. 2.常用组件 HSSFWorkboo ...

最新文章

  1. grafana_mysql安装
  2. 电脑如何测网速_Macbook Pro怎么查看网速Mac怎么测网速?
  3. 记录Ubuntu Windows下安装PyV8
  4. 前端学习(1340):mongoose验证规则
  5. RegExp 构造函数
  6. mysql amoeba 链接111,mycat1.4 amoeba3.0.5 mysql直连对照_mysql
  7. javascript基础-ajax
  8. 在网页上获取当前日期,数字时钟
  9. java 毕业论文_Java程序设计毕业论文.doc
  10. 【SequoiaDB|巨杉数据库】巨杉数据库快速入门之快速使用
  11. python解决中文显示问题Glyph 24179 (\N{CJK UNIFIED IDEOGRAPH-5E73}) missing from current font. func(*args)
  12. java jar加密工具_Java加密流程-防止jar被反编译
  13. CSS | 使一个元素高度由图片撑开
  14. 网络电话除了打电话还能用来做什么?
  15. 事业单位计算机操作专业技术分析面试题,事业单位面试:历年面试试题解析(四)...
  16. 在Power BI中用DAX计算净现值NPV
  17. 英语知识点整理day05-各国货币表达
  18. PMSM结构与基本工作原理
  19. 初学者写python之被除数连续被除四次
  20. 安全世界 5正当时:亚信安全2020第五空间战略发展高峰论坛举行

热门文章

  1. 设计模式之外观模式(C# / JavaScript / PHP / Java / Python / C++ 演示代码)
  2. dotnet core使用mvc创建web服务器
  3. 汇川工业互联网邀您莅临第十四届南京软博会
  4. 破解iEnglish
  5. oracle的序列如何创建,oracle 创建序列的方法
  6. 2001年3月英语中级口译真题答案及听力原文
  7. swift 命名空间
  8. Neural Machine Translation With PyTorch
  9. iphone5隐藏应用_如何在iPhone应用程序图标上隐藏烦人的红色数字徽章
  10. php调用Python找不到模块,从php调用python脚本不导入所需模块