引入依赖

  1. <dependency>
  2. <groupId>org.apache.poi</groupId>
  3. <artifactId>poi</artifactId>
  4. <version>3.9</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.poi</groupId>
  8. <artifactId>poi-ooxml</artifactId>
  9. <version>3.9</version>
  10. </dependency>

一、导入到excel

1.编写POIUtil类

  1. package com.exp.utils;
  2.  
  3. import com.exp.model.User;
  4. import org.apache.poi.hssf.usermodel.*;
  5. import org.apache.poi.ss.util.CellRangeAddress;
  6.  
  7. import java.io.FileOutputStream;
  8. import java.io.OutputStream;
  9. import java.util.List;
  10.  
  11. public class POIUtil {
  12.  
  13. public static void export(List<User> userList) throws Exception{
  14. //指定数据存放的位置
  15. OutputStream outputStream = new FileOutputStream("D:\\test.xls");
  16. //1.创建一个工作簿
  17. HSSFWorkbook workbook = new HSSFWorkbook();
  18. //2.创建一个工作表sheet
  19. HSSFSheet sheet = workbook.createSheet("test");
  20. //List<User> userList = userService.selectAll();
  21. //构造参数依次表示起始行,截至行,起始列, 截至列
  22. CellRangeAddress region=new CellRangeAddress(0, 0, 0, 3);
  23. sheet.addMergedRegion(region);
  24.  
  25. HSSFCellStyle style=workbook.createCellStyle();
  26. //水平居中
  27. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  28. //垂直居中
  29. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
  30.  
  31. HSSFRow row1 = sheet.createRow(0);
  32. HSSFCell cell = row1.createCell(0);
  33. //设置值,这里合并单元格后相当于标题
  34. cell.setCellValue("人员信息表");
  35. //将样式添加生效
  36. cell.setCellStyle(style);
  37.  
  38. for(int i = 0;i<userList.size();i++){
  39. //行
  40. HSSFRow row = sheet.createRow(i+1);
  41. //对列赋值
  42. row.createCell(0).setCellValue(userList.get(i).getId());
  43. row.createCell(1).setCellValue(userList.get(i).getName());
  44. row.createCell(2).setCellValue(userList.get(i).getPassword());
  45. row.createCell(3).setCellValue(userList.get(i).getRemark());
  46. }
  47. workbook.write(outputStream);
  48. outputStream.close();
  49. }
  50.  
  51. }

在TestController中

访问:http://localhost:8080/ssm2/test

在D盘会生成一个test.xls文件打开后如下

二。从excel导出到数据库

1.编写POIUtil工具类

  1. public static List<User> importExcel() throws Exception{
  2. HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(new File("D:\\t1.xls")));
  3. HSSFSheet sheet = null;
  4.  
  5. for(int i = 0;i < workbook.getNumberOfSheets();i++){
  6. //获取每个sheet
  7. sheet = workbook.getSheetAt(i);
  8. List<User> list = new ArrayList<User>();
  9. //getPhysicalNumberOfRows获取有记录的行数
  10. for(int j = 0;j < sheet.getPhysicalNumberOfRows();j++){
  11. Row row = sheet.getRow(j);
  12. if(null!=row){
  13. //getLastCellNum获取最后一列
  14. User user = new User();
  15. for(int k = 0;k < row.getLastCellNum();k++){
  16. if(null!=row.getCell(k)){
  17. if(k==0){
  18. Cell cell = row.getCell(0);
  19. //cell->double
  20. Double d = cell.getNumericCellValue();
  21. //double->int
  22. int id = new Double(d).intValue();
  23. user.setId(id);
  24. }
  25. if(k==1){
  26. Cell cell = row.getCell(1);
  27. //cell->string
  28. user.setName(cell.getStringCellValue().toString());
  29. }
  30. if(k==2){
  31. Cell cell = row.getCell(2);
  32. user.setPassword(cell.getStringCellValue().toString());
  33. }
  34. if(k==3){
  35. Cell cell = row.getCell(3);
  36. user.setRemark(cell.getStringCellValue().toString());
  37. }
  38. }
  39.  
  40. }
  41. list.add(user);
  42.  
  43. }
  44.  
  45. }
  46. System.out.println("读取sheet表:"+ workbook.getSheetName(i) + "完成");
  47. return list;
  48. }
  49.  
  50. return null;
  51. }

在编写工具类的时候遇到的问题总结:

(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

  1. <insert id="insertData" parameterType="list">
  2. insert into user(id,name,password,remark) VALUES
  3. <foreach collection="list" index="index" item="user" separator=",">
  4. (#{user.id},#{user.name},#{user.password},#{user.remark})
  5. </foreach>
  6. </insert>

3.UserMapper和UserService接口一样

  1. int insertData(List<User> users);

4.UserServiceImpl

  1. @Override
  2. public int insertData(List<User> users) {
  3. int num = userMapper.insertData(users);
  4. return num;
  5. }

5.TestController

  1. @RequestMapping("/insertData")
  2. public void insertData() throws Exception{
  3. List<User> users = POIUtil.importExcel();
  4. int num = userService.insertData(users);
  5. if(num > 0){
  6. System.out.println("插入数据成功");
  7. }
  8.  
  9. }

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的导入导出的更多相关文章

  1. poi实现excel的导入导出功能

    Java使用poi实现excel的导入导出功能: 工具类ExcelUtil,用于解析和初始化excel的数据:代码如下 package com.raycloud.kmmp.item.service.u ...

  2. SSM中使用POI实现excel的导入导出

    环境:导入POI对应的包 环境: Spring+SpringMVC+Mybatis POI对应的包 <dependency> <groupId>org.apache.poi&l ...

  3. java实现excel的导入导出(poi详解)[转]

    java实现excel的导入导出(poi详解) 博客分类: java技术 excel导出poijava  经过两天的研究,现在对excel导出有点心得了.我们使用的excel导出的jar包是poi这个 ...

  4. java 中Excel的导入导出

    部分转发原作者https://www.cnblogs.com/qdhxhz/p/8137282.html雨点的名字  的内容 java代码中的导入导出 首先在d盘创建一个xlsx文件,然后再进行一系列 ...

  5. JAVA对Excel的导入导出

    今天需要对比2个excel表的内容找出相同:由于要学的还很多上手很慢所以在这做个分享希望对初学的有帮助: 先是pom的配置: <dependency> <groupId>org ...

  6. Excel导入导出工具(简单、好用且轻量级的海量Excel文件导入导出解决方案.)

    Excel导入导出工具(简单.好用且轻量级的海量Excel文件导入导出解决方案.) 置顶 2019-09-07 16:47:10 $9420 阅读数 261更多 分类专栏: java   版权声明:本 ...

  7. excel的导入导出的实现

    1.创建Book类,并编写set方法和get方法 package com.bean; public class Book { private int id; private String name; ...

  8. c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出

    c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出 using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using S ...

  9. OpenXml Excel数据导入导出(含图片的导入导出)

    声明:里面的很多东西是基于前人的基础上实现的,具体是哪些人 俺忘了,我做了一些整合和加工 这个项目居于openxml做Excel的导入导出,可以用OpenXml读取Excel中的图片 和OpenXml ...

随机推荐

  1. 1java基础

    1.java特性 详细解读 Java语言_小沐CA-CSDN博客 (1)Easy:Java的语法比C++的相对简单,另一个方面就是Java能使软件在很小的机器上运行,基础解释其和类库的支持的大小约为4 ...

  2. Java 使用新方法打印Word文档

    前言 我曾写过一篇文章,它主要介绍了如何通过物理打印机和虚拟打印机来打印Word文档.今天这篇教程将介绍一种新的方法来实现对Word文档的打印. 此次使用到的类库仍然是Spire.Doc for Ja ...

  3. 【Uva1025 A Spy in the Metro】动态规划

    题目描述 某城市地铁是线性的,有n(2≤n≤50)个车站,从左到右编号1~n.有M1辆列车从第1站开始往右开,还有M2辆列车从第n站开始往左开.列车在相邻站台间所需的运行时间是固定的,因为所有列车的运 ...

  4. 手把手教windows上安装linux虚拟机及环境配置

    目录 版本说明 安装虚拟机 典型方式安装(推荐小白,带有图形界面,助于学习,但占用空间大) 自定义方式安装(推荐老司机) 创建快照 克隆虚拟机 windows上安装linux虚拟机不管是对于新人还是老 ...

  5. jvm源码解读--03 常量池的解析ConstantPool

    先看bt栈 (gdb) bt #0 ConstantPool::allocate (loader_data=0x7fe21802e868, length=87, __the_thread__=0x7f ...

  6. 嵌套div的onClick事件问题

    嵌套div的onClick事件问题我在下面的代码中的外层div中加了onClick事件,这样当鼠标点击这个div的时候就会跳转了.但是我在图片上加了一些其他效果,所以当鼠标点击中间的img时不能触发跳 ...

  7. 论文笔记:(NIPS2018)PointCNN: Convolution On X-Transformed Points

    目录 摘要 一.2D卷积应用在点云上存在的问题 二.解决的方法 2.1 idea 2.2 X-conv算子 2.3 分层卷积 三.实验 3.1分类和分割 3.2消融实验.可视化和模型复杂度 总结 仍存 ...

  8. node溢出

    在做项目的过程中,项目越来越大,后面导致项目无法正常启动,查了原因是因为node 溢出了. 先看看溢出时报的错 解决办法:  increase-memory-limit插件 1.在package.js ...

  9. Python 机器学习实战 —— 无监督学习(下)

    前言 在上篇< Python 机器学习实战 -- 无监督学习(上)>介绍了数据集变换中最常见的 PCA 主成分分析.NMF 非负矩阵分解等无监督模型,举例说明使用使用非监督模型对多维度特征 ...

  10. .Netcore HttpClient源码探究

    源码搜索与概述 搜索HttpClient源码 https://source.dot.net/#System.Net.Http/System/Net/Http/HttpClient.cs 1.HttpC ...