Java实现excel2003、2007导入功能完整版demo, 内置sql文件: https://gitee.com/PanGuanQing/excel-import-demo.git

1.要导入的excel数据

2.导入依赖

<!--excel 2003-->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.8</version>
</dependency>
<!--excel 2007-->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.8</version>
</dependency>

3.UserController

import com.poi.exceldeal.response.ResponseResult;
import com.poi.exceldeal.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;@RestController
public class UserController {@Autowiredprivate IUserService iUserService;/*** 导入excel文件* @param file* @param type 0增量更新  1全量更新* @return*/@ResponseBody@PostMapping(value = "/doExcel")public ResponseResult<String> doExcel(@RequestParam(value="file") MultipartFile file, int type){return iUserService.readExcelFile(file,type);}
}

4.UserServiceImpl

import com.poi.exceldeal.domain.User;
import com.poi.exceldeal.exception.MyException;
import com.poi.exceldeal.mapper.UserMapper;
import com.poi.exceldeal.response.ResponseResult;
import com.poi.exceldeal.service.IUserService;
import com.poi.exceldeal.util.ExcelUtil;
import com.poi.exceldeal.util.SpringUtil;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;@Service
public class UserServiceImpl implements IUserService {@Autowiredprivate UserMapper userMapper;@Overridepublic ResponseResult<String> readExcelFile(MultipartFile file, int type) {//解析excel,获取上传的事件单Map<String, List> map = null;try {Workbook web = SpringUtil.getBean(ExcelUtil.class).getExcelInfo(file);map = readExcelValue(web);//已将excel中的数据转换到list,操作list,保存到数据库;List<User> users = map.get("excel");for (int i = 0; i < users.size(); i++) {User user = users.get(i);User existUser = userMapper.selectByPhoneNumber(user.getPhoneNumber());//1、增量更新是指在进行导入操作时,已有的解析记录保持不变,然后添加新增的解析记录。if (type==0) {if (existUser == null) {userMapper.add(user);}//2、全量更新是指在进行导入操作时,删除已有的所有解析记录,然后添加文件中的解析记录。} else if (type==1) {if (existUser == null) {userMapper.add(user);} else {userMapper.delete(user.getId());userMapper.add(user);}}}} catch (Exception e) {e.printStackTrace();throw new MyException("接受excel表格中的数据失败!!!");}return ResponseResult.createBySuccessMessage("操作成功");}/*** 读取Excel里面的信息* @param wb* @return*/private Map<String, List> readExcelValue(Workbook wb) throws ParseException {// 获取第一个shellSheet sheet = wb.getSheetAt(0);ExcelUtil.totalRows = sheet.getLastRowNum();// 获取Excel的列数(前提是有行数)if (ExcelUtil.totalRows > 1 && sheet.getRow(0) != null) {ExcelUtil.totalCells = sheet.getRow(0).getPhysicalNumberOfCells();}Map<String,List> map = new HashMap<String,List>();List<User> users = new ArrayList<>();// 循环Excel行数for (int r = 1; r < ExcelUtil.totalRows+1; r++) {//从第二行开始写,标题在第一行boolean str = true;Row row = sheet.getRow(r);if (row==null) {continue;}User user = new User();// 循环Excel的列for (int c = 0; c < ExcelUtil.totalCells; c++) {Cell cell = row.getCell(c);if (cell!=null) {if (c==0) {//r行开始的第一个单元格cell.setCellType(Cell.CELL_TYPE_STRING); //CellType.STRINGString firstName1 = cell.getStringCellValue();if (firstName1 == null || firstName1 == ""){str = false;continue;};String serialNumber = firstName1.replaceAll(" +","");user.setSerialNumber(serialNumber);}else if (c==1) {//r行开始的第二个单元格cell.setCellType(Cell.CELL_TYPE_STRING);String firstName1 = cell.getStringCellValue();if (firstName1 == null || firstName1 == ""){str = false;continue;};String phoneNumber = firstName1.replaceAll(" +","");user.setPhoneNumber(phoneNumber);}else if (c==2) {//r行开始的第三个单元格cell.setCellType(Cell.CELL_TYPE_STRING);String firstName1 = cell.getStringCellValue();if (firstName1 == null || firstName1 == ""){str = false;continue;};String organizationName = firstName1.replaceAll(" +","");user.setOrganizationName(organizationName);}else if (c==3) {//r行开始的第四个单元格cell.setCellType(Cell.CELL_TYPE_STRING);String firstName1 = cell.getStringCellValue();if (firstName1 == null || firstName1 == ""){str = false;continue;};String publicStartTime = firstName1.replaceAll(" +","");SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");user.setPublicStartTime(sdf.parse(publicStartTime));}else if (c==4) {//r行开始的第五个单元格cell.setCellType(Cell.CELL_TYPE_STRING);String firstName1 = cell.getStringCellValue();if (firstName1 == null || firstName1 == ""){str = false;continue;};String publicEndTime = firstName1.replaceAll(" +","");SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");user.setPublicEndTime(sdf.parse(publicEndTime));}else if (c==5) {//r行开始的第六个单元格cell.setCellType(Cell.CELL_TYPE_STRING);String firstName1 = cell.getStringCellValue();if (firstName1 == null || firstName1 == ""){str = false;continue;};String publicCount = firstName1.replaceAll(" +","");user.setPublicCount(Integer.valueOf(publicCount));}}}// 添加到listif(str == true) {users.add(user);map.put("excel",users);}}return map;}
}

5.ExcelUtil

import com.poi.exceldeal.exception.MyException;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.io.InputStream;@Component
public class ExcelUtil {//总行数public static int totalRows = 0;//总条数public static int totalCells = 0;/*** 读EXCEL文件,获取信息集合* @param mFile* @return*/public Workbook getExcelInfo(MultipartFile mFile) {String fileName = mFile.getOriginalFilename();//获取文件名Workbook wb = null;try {if (!validateExcel(fileName)) {// 验证文件名是否合格throw new MyException("文件名不是excel格式");}boolean isExcel2003 = true;// 根据文件名判断文件是2003版本还是2007版本if (isExcel2007(fileName)) {isExcel2003 = false;}wb = createExcel(mFile.getInputStream(), isExcel2003);} catch (Exception e) {e.printStackTrace();}return wb;}/*** 验证EXCEL文件** @param filePath* @return*/public boolean validateExcel(String filePath) {if (filePath == null || !(isExcel2003(filePath) || isExcel2007(filePath))) {return false;}return true;}//返回true是2003 excelpublic boolean isExcel2003(String filePath)  {return filePath.matches("^.+\\.(?i)(xls)$");}//返回true是2007 excelpublic boolean isExcel2007(String filePath) {return filePath.matches("^.+\\.(?i)(xlsx)$");}/*** 根据excel里面的内容* @param is 输入流* @param isExcel2003 excel是2003还是2007版本* @return* @throws IOException*/private Workbook createExcel(InputStream is, boolean isExcel2003) {Workbook wb = null;try{if (isExcel2003) {// 当excel是2003时,创建excel2003wb = new HSSFWorkbook(is);} else {// 当excel是2007时,创建excel2007wb = new XSSFWorkbook(is);}} catch (IOException e) {e.printStackTrace();}return wb;}}

6.导入成功

Java实现excel 2003、2007导入功能相关推荐

  1. Java实现Excel文件的导入功能

    近期在工作上,遇到了实现Excel文件的导入功能,在此和小伙伴们分享一下过程. 实现Excel文件的导入呢,首先我们需要先上传文件,然后在后端进行解析文件中的内容.这里我们需要用到 poi 的这样一个 ...

  2. Microsoft Office Excel 2003/2007 多窗口切换问题

    我的Microsoft Office Excel 2003/2007在同时打开两个表以上的时候,从一个表切换到另一个表就不能输入东西了,就是鼠标是个箭头,不能指在那个区域.重新装过OFFICE还是不行 ...

  3. java导出excel并实现下载功能

    java导出excel并实现下载功能 这里我们使用alibaba的依赖包 <dependency><groupId>com.alibaba</groupId>< ...

  4. java横向导出excel_利用Java进行Excel的数据导入导出

    1. 引言 MS 的电子表格(Excel)是Office 的重要成员,是保存统计数据的一种常用格式.在一 个Java 应用中,将一部分数据生成Excel 格式,是与其他系统无缝连接的重要手段.在远程 ...

  5. 用java将excel表单导入数据库表单----新手入门

    构建项目思路 1.利用Excel第三方工具,将Excel文件读取到内存中.使用最简单,方便的工具是apache的poi工具包,自己网上下载 http://poi.apache.org/ ,使用方法网上 ...

  6. java实现excel文件批量导入数据

    具体实现: 以学生信息为例,将Excel模板信息配置在XML文件中,通过POI实现对excel文件读取操作,然后将读取的数据插入数据库中.具体思路是将模板信息配置在xml中,在项目启动时,通过spri ...

  7. java代码 EXCEL实战(一) 导入手机号

    一.需求描述: 管理后台用户管理模块下某用户操作界面,需要一个批量导入手机号的功能. 二.前端代码: 2.1 html代码 <table><tr><td><i ...

  8. 如何用java完成Excel快速的导入导出

    日常工作中,Excel是我们经常需要处理的文件,报表的生成,数据的导出,几乎每个项目都需要写对应的处理.作者也是编写这块代码大军的一员,能否有方法让我们不用重复编写代码呢,能否只要简单配置就可以完成我 ...

  9. java做 excel文件的 导入导出 (SSM+layer)

    做的项目使用时 Java ssm + 前端layer+ freemark. 因为是从项目中扣的代码.整理了下逻辑. 有问题的下方留言哈 导入的依赖 poi <!-- https://mvnrep ...

最新文章

  1. 读书笔记-内存初始化和清理
  2. 白话Elasticsearch50-深入聚合数据分析之doc values机制
  3. Android --- 订单编号怎样不重复?一秒钟如果有n个人同时下单怎么解决?凌晨12点限量抢购1000件商品,直到抢完为止订单编号怎么处理?
  4. iconfont 图标宽高出问题_一个技巧,100,000,000+PPT图标就可以任性使用!【黑科技第11期】...
  5. 10.25模拟 三角形
  6. 前端学习(169):无语义元素
  7. 大促背后的流量利器|手淘push升级 比你更懂你
  8. redis查询key的数量
  9. wireshark使用_使用 Wireshark 抓取数据包
  10. 查看表结构索引_索引策略–第1部分–选择正确的表结构
  11. requests01_嵩山
  12. 闲鱼面试官:Thread.sleep(0) 到底有什么用?我:有点懵~
  13. 一文详解Adobe Photoshop 2020安装教程
  14. 系统优化怎么做-开篇
  15. 你的GitHub代码已打包运往北极,传给1000年后人类!网友:我的Bug还没修复...
  16. 计算机专业调剂化学专业,汕头大学计算机化学专业2015年考研调剂信息
  17. Gradle‘s dependency cache may be corrupt (this sometimes occurs after a network connection timeout)
  18. pandoc 转换html,pandoc将markdown转换输出HTML slide
  19. JavaScript中的“黑话” 1
  20. 香港服务器适合用来搭建app吗。

热门文章

  1. php imagick 图片裁切,php Imagick , 怎么使用Imagick裁切图片
  2. 滚烫出炉:06中国IT十大财经人物
  3. 2021年全球医药电子商务行业调研及趋势分析报告
  4. 前端与移动开发----微信小程序----小程序(四)
  5. 音符起始点检测(音频节奏检测)(6)
  6. Homestead 安装 phpMyAdmin 作为数据库管理客户端 — Laravel 实战 iBrand API 教程
  7. python中的各种符号(欢迎补充)
  8. Linux - 自动同步网络时间
  9. Macbook无法开机备份数据 制作安装系统U盘 安装系统 (图文)
  10. php判断百度来路,判断是否通过百度搜索进入你的网站 - 小俊学习网