java中Excel数据批量导入

相关依赖

<dependency><groupId>org.jeecg</groupId><artifactId>easypoi-base</artifactId><version>2.4.0</version>
</dependency>

大致思路:

1、判断获取的文件后缀 是xls还是xlsx

2、声明WorkBook,获取Sheet

3、通过sheet 获取row,注意观察,是不是默认从0开始计数

4、获取每一个cell,判断其类型,给每一种类型赋值

5、调用mapper层,进行批量操作

相关代码示例:

1、实体类

package com.xw.model;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;@Data
@AllArgsConstructor
@NoArgsConstructor
public class ExcelBatchImportData implements Serializable {/*** 手机号*/private String preferentialPhone;/*** 车牌号*/private String preferentialCarNumber;/*** 优惠分组的id*/private String groupingId;/*** 创建时间*/private String createTime;/*** 修改时间*/private String modifyTime;}

2、controller

package com.xw.controller;import com.xw.service.GroupConfigService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;import java.util.HashMap;
import java.util.Map;@Controller
@RequestMapping("/rs")
public class TestController {/*** GroupConfigService groupConfigService*/@Autowiredprivate GroupConfigService groupConfigService;/*** logger*/private Logger logger = LoggerFactory.getLogger(TestController.class);/*** Excel导入* @param file 文件对象* @return Map<String, Object>*/@RequestMapping(value = "/importExcel",method = RequestMethod.POST)@ResponseBodypublic Map<String, Object> importExcel(@RequestParam("file") MultipartFile file){Map<String, Object> map = new HashMap<>();try {map = groupConfigService.importExcel(file);}catch (Exception e){map.put("status",-1);map.put("data", "导入异常");logger.error(e.getMessage(),e);}return map;}
}

3、service

package com.xw.service;import com.xw.mapper.GroupConfigMapper;
import com.xw.model.ExcelBatchImportData;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
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.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;@Service
public class GroupConfigService {/*** 定义全局的常量值*/private static final String XLS = "xls";/*** 定义全局的常量值*/private static final String XLSX = "xlsx";/*** GroupConfigDao groupConfigDao*/@Autowiredprivate GroupConfigMapper groupConfigMapper;/*** logger*/private Logger logger = LoggerFactory.getLogger(GroupConfigService.class);/*** Excel导入** @param file 文件对象* @return Map<String, Object>*/public Map<String, Object> importExcel(MultipartFile file) {List<ExcelBatchImportData> tblFixChangeList = new ArrayList<>();Map<String, Object> map = new HashMap<>();Workbook workbook = null;String filename = file.getOriginalFilename();try {if (filename != null) {if (filename.endsWith(XLS)) {// 2003workbook = new HSSFWorkbook(file.getInputStream());} else if (filename.endsWith(XLSX)) {// 2007workbook = new XSSFWorkbook(file.getInputStream());} else {throw new Exception("文件不是Excel文件");}} else {logger.error("文件为空");}// 获取sheetSheet sheet = workbook.getSheet("Sheet1");int lastRowNum = sheet.getLastRowNum();if (lastRowNum == 0) {throw new Exception("请填写行数");}for (int i = 1; i < lastRowNum + 1; i++) {Row row = sheet.getRow(i);if (row != null) {// 读取cell单元格内容ExcelBatchImportData tblFixChange = new ExcelBatchImportData();// 手机号String phone = getCellValue(row.getCell(0));tblFixChange.setPreferentialPhone(phone);// 车票号String carNumber = getCellValue(row.getCell(1));tblFixChange.setPreferentialCarNumber(carNumber);String groupId = getCellValue(row.getCell(2));tblFixChange.setGroupingId(groupId);// 日期格式化操作SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String time = sdf.format(new Date());tblFixChange.setCreateTime(time);tblFixChange.setModifyTime(time);tblFixChangeList.add(tblFixChange);}}// 批量插入groupConfigMapper.addBatchMembers(tblFixChangeList);map.put("status", 1);map.put("data", "导入数据成功");} catch (Exception e) {map.put("status", -1);map.put("data", "导入数据异常");logger.error(e.getMessage(), e);}return map;}/*** 获取每个单元格内容** @param cell cell* @return String*/private String getCellValue(Cell cell) {// 单元格内容String value = "";if (cell != null) {// 以下是判断数据的类型switch (cell.getCellType()) {// 数字case HSSFCell.CELL_TYPE_NUMERIC:value = cell.getNumericCellValue() + "";// 判断cell是不是日期类型的if (HSSFDateUtil.isCellDateFormatted(cell)) {// 获取日期类型的单元格Date date = cell.getDateCellValue();if (null != date) {value = new SimpleDateFormat("yyyy-MM-dd").format(date);} else {value = "";}} else {value = new DecimalFormat("0").format(cell.getNumericCellValue());}break;// 字符串case HSSFCell.CELL_TYPE_STRING:value = cell.getStringCellValue();break;// Booleancase HSSFCell.CELL_TYPE_BOOLEAN:value = cell.getBooleanCellValue() + "";break;// 公式case HSSFCell.CELL_TYPE_FORMULA:value = cell.getCellFormula() + "";break;// 空格case HSSFCell.CELL_TYPE_BLANK:value = "";break;// 错误case HSSFCell.CELL_TYPE_ERROR:value = "非法字符";default:value = "未知类型";break;}}return value.trim();}
}

4、mapper

package com.xw.mapper;import com.xw.model.ExcelBatchImportData;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface GroupConfigMapper {/*** 批量插入数据* @param excelBatchImportData tblFixChangeList*/void addBatchMembers(@Param("excelBatchImportData") List<ExcelBatchImportData> excelBatchImportData);
}

5、mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xw.mapper.GroupConfigMapper"><insert id="addBatchMembers">insert into group_config(preferential_phone, preferential_carNumber, grouping_id, create_time, modify_time)values<foreach collection="excelBatchImportData" item="item" separator=",">(#{item.preferentialPhone},#{item.preferentialCarNumber},#{item.groupingId},#{item.createTime},#{item.modifyTime},)</foreach></insert></mapper>

java Excel 批量导入相关推荐

  1. java excel批量导入数据库数据_Java实现Excel数据批量导入数据库

    Java实现Excel数据批量导入数据库 概述: 这个小工具类是工作中的一个小插曲哦,因为提数的时候需要跨数据库导数... 有的是需要从oracle导入mysql ,有的是从mysql导入oracle ...

  2. 【转帖】Java实现Excel批量导入数据

    这篇文章主要为大家详细介绍了Java实现Excel批量导入数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Excel的批量导入是很常见的功能,这里采用Jxl实现,数 ...

  3. Java实现Excel批量导入数据库

    springboot实现Excel批量导入数据库 前言:项目开发中最容易碰到的需求即将Excel数据批量上传到数据库中存储 -> Java实现,Excel数据表,MySQL数据库,具体步骤如下- ...

  4. excel批量导入数据

    这个功能也是我以前项目中经常用到的,感觉很实用,必须拿来分享下: excel进行批量导入数据,结合struts2+ajax 导入的视图:batchAdd.ftl(视图无关紧要的,可以换成其他任何视图, ...

  5. SpringMVC框架通过Excel批量导入数据

    文章目录 SpringMVC框架通过Excel批量导入数据 1.导入需要的jar包 2.配置文件 3.创建Java对象类 4.解析Excel表格数据的工具类 5.前端请求 6.Controller处理 ...

  6. Springboot Excel批量导入数据

    POI处理Excel <!-- poi处理excel --><dependency><groupId>org.apache.poi</groupId>& ...

  7. excel宏转txt替换强制换行符_三个步骤学会用EXCEL批量导入anki题库

    Anki真的是个好用到不想推荐给朋友的软件,本人最近准备刷个新题库,找了一上午找不到原来教我EXCEL导入anki的网页,为了防止我自己过段时间又忘了应该怎么导入,我写了这个教程,写都写了,就顺手发出 ...

  8. 订餐系统之Excel批量导入

    批量导入现在基本已经成为各类系统的标配了,当前,我们订餐系统也不例外,什么商家呀.商品呀.优惠码之类的,都少不了.毕竟嘛,对非开发人员来说,看到Excel肯定比看到很多管理系统还是要亲切很多的.这里, ...

  9. php批量添加excel数据库表,php 把excel批量导入到数据库代码

    php 把excel批量导入到数据库代码 我们是利用了ExcelFileParser这个扩展来处理的哦, Excel数据获取演示 Excel数据获取演示 /** * CopyRight (c) 200 ...

最新文章

  1. mysql 快捷查询数据库各表占用空间,mysql查看索引占用空间,mysql查看数据占用空间
  2. Jquery绑定事件(bind和live的区别)[转]
  3. linux删除非空目录
  4. [JAVA基础] 成员变量和局部变量(一看就懂的总结归纳篇)
  5. 华三交换机VLAN 篇
  6. Python稳基修炼的经典案例9(计算机二级、初学者必会turtle库例题)
  7. 报纸、电商、PC互联网颠覆传统行业,带来新的生态,自媒体也一样
  8. IT工程师志强追剧《延禧攻略》后,竟然……
  9. hdu 4323 Magic Number dp 多校联合赛(三)第四题
  10. c语言cyc函数,cyc指标源码
  11. Va02 修改数量和价格条件时报错
  12. 不能是underfined.xxx
  13. 罗永浩做直播电商行不行
  14. PointCloudLibrary点云库介绍
  15. UE4-简单的FPS项目制作(B站视频笔记)P1P2
  16. JZOJ.4377[GDOI2016模拟3.10]习用之语 解题报告
  17. 鸟哥的linux私房菜学习笔记《二十》bash简介
  18. 【make】make常见问题
  19. 【积跬步以至千里】合并优盘分区
  20. 解析Intel三种接口主板布局LGA775/1156/1366

热门文章

  1. postgresql vaccum机制
  2. 数据结构树-->B树
  3. 苹果电脑重装苹果系统制作u盘启动11版本
  4. 如何使用Do Your Data Recovery恢复系统升级时丢失的数据
  5. 单元测试框架——Junit5
  6. 一文带你全面解析postman工具的使用
  7. asp.net+sqlserver连锁超市配送系统C#项目
  8. 一文辨析,性能分析top命令中进程NI和PR
  9. excel 表格复制到word后,宽超出word如何调整?
  10. python functools partial_浅谈python标准库--functools.partial