POI实现excel的导入导出
引入依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
一、导入到excel
1.编写POIUtil类
package com.exp.utils; import com.exp.model.User;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress; import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List; public class POIUtil { public static void export(List<User> userList) throws Exception{
//指定数据存放的位置
OutputStream outputStream = new FileOutputStream("D:\\test.xls");
//1.创建一个工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
//2.创建一个工作表sheet
HSSFSheet sheet = workbook.createSheet("test");
//List<User> userList = userService.selectAll();
//构造参数依次表示起始行,截至行,起始列, 截至列
CellRangeAddress region=new CellRangeAddress(0, 0, 0, 3);
sheet.addMergedRegion(region); HSSFCellStyle style=workbook.createCellStyle();
//水平居中
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//垂直居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); HSSFRow row1 = sheet.createRow(0);
HSSFCell cell = row1.createCell(0);
//设置值,这里合并单元格后相当于标题
cell.setCellValue("人员信息表");
//将样式添加生效
cell.setCellStyle(style); for(int i = 0;i<userList.size();i++){
//行
HSSFRow row = sheet.createRow(i+1);
//对列赋值
row.createCell(0).setCellValue(userList.get(i).getId());
row.createCell(1).setCellValue(userList.get(i).getName());
row.createCell(2).setCellValue(userList.get(i).getPassword());
row.createCell(3).setCellValue(userList.get(i).getRemark());
}
workbook.write(outputStream);
outputStream.close();
} }
在TestController中
访问:http://localhost:8080/ssm2/test
在D盘会生成一个test.xls文件打开后如下
二。从excel导出到数据库
1.编写POIUtil工具类
public static List<User> importExcel() throws Exception{
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(new File("D:\\t1.xls")));
HSSFSheet sheet = null; for(int i = 0;i < workbook.getNumberOfSheets();i++){
//获取每个sheet
sheet = workbook.getSheetAt(i);
List<User> list = new ArrayList<User>();
//getPhysicalNumberOfRows获取有记录的行数
for(int j = 0;j < sheet.getPhysicalNumberOfRows();j++){
Row row = sheet.getRow(j);
if(null!=row){
//getLastCellNum获取最后一列
User user = new User();
for(int k = 0;k < row.getLastCellNum();k++){
if(null!=row.getCell(k)){
if(k==0){
Cell cell = row.getCell(0);
//cell->double
Double d = cell.getNumericCellValue();
//double->int
int id = new Double(d).intValue();
user.setId(id);
}
if(k==1){
Cell cell = row.getCell(1);
//cell->string
user.setName(cell.getStringCellValue().toString());
}
if(k==2){
Cell cell = row.getCell(2);
user.setPassword(cell.getStringCellValue().toString());
}
if(k==3){
Cell cell = row.getCell(3);
user.setRemark(cell.getStringCellValue().toString());
}
} }
list.add(user); } }
System.out.println("读取sheet表:"+ workbook.getSheetName(i) + "完成");
return list;
} return null;
}
在编写工具类的时候遇到的问题总结:
(1)getLastRowNum
如果sheet中一行数据都没有则返回-1,只有第一行有数据则返回0,最后有数据的行是第n行则返回 n-1;
getPhysicalNumberOfRows
获取有记录的行数,即:最后有数据的行是第n行,前面有m行是空行没数据,则返回n-m;
之前写成getLastRowNum()执行到row.getLastCellNum()=-1,获取不到excel中的值
(2)如何在循环里将值赋值到一个对象中,我就写了个if判断
(3)cell->int和string
2.UserMapper.xml
<insert id="insertData" parameterType="list">
insert into user(id,name,password,remark) VALUES
<foreach collection="list" index="index" item="user" separator=",">
(#{user.id},#{user.name},#{user.password},#{user.remark})
</foreach>
</insert>
3.UserMapper和UserService接口一样
int insertData(List<User> users);
4.UserServiceImpl
@Override
public int insertData(List<User> users) {
int num = userMapper.insertData(users);
return num;
}
5.TestController
@RequestMapping("/insertData")
public void insertData() throws Exception{
List<User> users = POIUtil.importExcel();
int num = userService.insertData(users);
if(num > 0){
System.out.println("插入数据成功");
} }
excel数据在D:/t1.xls,数据如下
6.测试
访问:http://localhost:8080/ssm2/insertData
在数据库中查看如下即成功:
<insert id="insertData" parameterType="list"> insert into user(id,name,password,remark) VALUES <foreach collection="list" index="index" item="user" separator=","> (#{user.id},#{user.name},#{user.password},#{user.remark}) </foreach> </insert>
POI实现excel的导入导出的更多相关文章
- poi实现excel的导入导出功能
Java使用poi实现excel的导入导出功能: 工具类ExcelUtil,用于解析和初始化excel的数据:代码如下 package com.raycloud.kmmp.item.service.u ...
- SSM中使用POI实现excel的导入导出
环境:导入POI对应的包 环境: Spring+SpringMVC+Mybatis POI对应的包 <dependency> <groupId>org.apache.poi&l ...
- java实现excel的导入导出(poi详解)[转]
java实现excel的导入导出(poi详解) 博客分类: java技术 excel导出poijava 经过两天的研究,现在对excel导出有点心得了.我们使用的excel导出的jar包是poi这个 ...
- java 中Excel的导入导出
部分转发原作者https://www.cnblogs.com/qdhxhz/p/8137282.html雨点的名字 的内容 java代码中的导入导出 首先在d盘创建一个xlsx文件,然后再进行一系列 ...
- JAVA对Excel的导入导出
今天需要对比2个excel表的内容找出相同:由于要学的还很多上手很慢所以在这做个分享希望对初学的有帮助: 先是pom的配置: <dependency> <groupId>org ...
- Excel导入导出工具(简单、好用且轻量级的海量Excel文件导入导出解决方案.)
Excel导入导出工具(简单.好用且轻量级的海量Excel文件导入导出解决方案.) 置顶 2019-09-07 16:47:10 $9420 阅读数 261更多 分类专栏: java 版权声明:本 ...
- excel的导入导出的实现
1.创建Book类,并编写set方法和get方法 package com.bean; public class Book { private int id; private String name; ...
- c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出
c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出 using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using S ...
- OpenXml Excel数据导入导出(含图片的导入导出)
声明:里面的很多东西是基于前人的基础上实现的,具体是哪些人 俺忘了,我做了一些整合和加工 这个项目居于openxml做Excel的导入导出,可以用OpenXml读取Excel中的图片 和OpenXml ...
随机推荐
- 一文读懂k8s rbac 权限验证
自我认为的k8s三大难点:权限验证,覆盖网络,各种证书. 今天就说一下我所理解的权限验证rbac. 咱不说rbac0,rbac1,rbac2,rbac3.咱就说怎么控制权限就行. 一.前言 1,反正R ...
- NestJS WebSocket 开始使用
使用NestJs提供WebSocket服务. 本文会在新建项目的基础上增加2个类 Gateway 实现业务逻辑的地方 WebSocketAdapter WebSocket适配器 新建项目 新建一个项目 ...
- WLS中Linux与Windows间的环境共享
Reference 更多cmd.exe帮助参考 (cmd_helps)[https://ss64.com/nt/cmd.html] (WSL备份,windows Docker安装)[https://w ...
- 痞子衡嵌入式:i.MXRT1010, 1170型号上不一样的SNVS GPR寄存器读写控制设计
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1010, 1170型号上不一样的SNVS GPR寄存器读写控制设计. 痞子衡之前两篇文章 <在SBL项目实战中妙用i ...
- noip模拟27[妹子图·腿·腰](fengwu半仙的妹子们)
\(noip模拟27\;solutions\) 这次吧,我本来以为我能切掉两个题,结果呢??只切掉了一个 不过,隔壁Varuxn也以为能切两个,可惜了,他一个都没切...... 确实他分比我高一点,但 ...
- 将base64Url对应图片保存到本地
上图中的内容就是base64编码之后对应的Url 图中base64,之前的都是用于声明该图片的格式以及它的编码格式 base64,之后的就是该图片对应的数据了 我们只需要把数据转换为字节保存下来即 ...
- Ubuntu21.04 / Linux Mint20.2 安装 TradingView分析软件
TradingView 是我们经常使用的一个分析工具!在Linux 下安装桌面版,就可以爽快的用起来了,目前是Beta测试版,相信很快就会有正式版的 1.打开终端,执行下列命令,更新系统到最新 sud ...
- Deepin 20.2.2 /UOS 20.2 添加ppa源
由于 工作需要,需要通过PPA安装一些优质的软件包,但是 Deepin 默认不支持PPA源 解决方法 由于Deepin/Uos系统默认是没有安装PPA的那么我们得先安装PPA来支持"add- ...
- 论文笔记:(ICML2020)On Learning Sets of Symmetric Elements
目录 摘要 一.引言 二.先前的工作 三.基础 3.1 符号和基本定义 3.2 G-不变网络 3.3 描述等变层 3.4 Deep sets 四.DSS层 4.1 对称元素集合 4.2 等变层的表征 ...
- 【FATE】设置虚拟机固定IP以及免密登录
一.前期准备 1.VMWare上新建三个Centos7的虚拟机 2.VMWare虚拟机的三种联网方式 1.桥接模式 -- 桥接: 默认使用VMnet0 这一种联网方式最简单,在局域网内,你的主机是怎么 ...