1.controller

    /***导入Excel表*/@RequestMapping(value="/importEmp",method = RequestMethod.POST)public ResponseEntity<?> importEmp(@RequestParam("file") MultipartFile file)throws Exception {//判断文件是否为空if (file == null) {return new ResponseEntity("文件为空", HttpStatus.OK);}//获取文件名String name = file.getOriginalFilename();//进一步判断文件是否为空(即判断其大小是否为0或其名称是否为null)long size = file.getSize();if (name == null || ("").equals(name) && size == 0) {return new ResponseEntity("文件为空", HttpStatus.OK);}//  获取当前导入的储存对象Expert  expert =new Expert();List  list =new ArrayList<Expert>();//通过这个方法 ,将excel里的数据 以list列表方式返回List list1 = excelService.batchImport(name, file, expert, list);for (int i=0;i<list1.size();i++) {expertService.insert((Expert) list1.get(i));}return  new ResponseEntity("成功", HttpStatus.OK);}

2.service.impl


public List batchImport(String name, MultipartFile file, Object object,List list) throws NoSuchFieldException, IllegalAccessException {Workbook workbook = null;try {// 判断是哪种后缀boolean isExcel2003 = name.endsWith("xls")?true:false;if(isExcel2003){workbook = new HSSFWorkbook(file.getInputStream());}else{workbook = new XSSFWorkbook(file.getInputStream());}} catch (Exception e) {e.printStackTrace();}Sheet hssfSheet = workbook.getSheetAt(0);  //可能多个execl表格Row hssfRow = hssfSheet.getRow(0);      //第一行数据//通过第一行的名称,通过数据库表查询对应的字段名for (int i = 0; i < hssfRow.getPhysicalNumberOfCells(); i++) {String cell = hssfRow.getCell(i).getStringCellValue();Excel excel = selectById(cell);if (excel == null) {new IllegalAccessException("没找到对应的key");}hssfRow.getCell(i).setCellValue(excel.getKey());}for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {for (int i = 0; i < hssfRow.getPhysicalNumberOfCells(); i++) {String stringCellValue = hssfRow.getCell(i).getStringCellValue();Cell cell = hssfSheet.getRow(rowNum).getCell(i);Class<?> aClass = object.getClass();Field field = aClass.getDeclaredField(stringCellValue);field.setAccessible(true);if (cell.getCellTypeEnum() == CellType.NUMERIC) {field.set(object,String.valueOf(cell.getNumericCellValue()));}if (cell.getCellTypeEnum() ==CellType.STRING) {field.set(object,cell.getStringCellValue());}}list.add(object);}return list;}

3.数据库定义

通过查询value 找到对应的key  数据库字段

4.pom.xml

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

总结:

通过sql ,key value的储存,查找想要的key 的字段名 ,在通过对应的字段名来储存到list里
后续可以修改对应的sql里面的value数据。来控制所有的导入

通用的导入excel模板样式相关推荐

  1. python excel模板 生成excel表格_python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图...

    python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 #coding=utf-8 from openpyxl importload_workbookfro ...

  2. struts2导入excel模板_「微干货」“人员其他数据导入”应用介绍

    前提概要 人员档案资料维护多种多样,经常碰到已经运行一段时间,并且人员档案的基本信息已维护好了:此时,又要补充诸如"教育经历"类似的多行数据,脑壳疼,如何录入可以简便,让我们一起来 ...

  3. 导入excel 模板

    其实导入的话 其实很简单 根据模板导入更加单 首先我们需要获取前端的文件 前端一般用multipart/form-data 所有我们接收的话就用 MultipartHttpServletRequest ...

  4. java 分析excel模板_java如何读取Excel简单模板

    场景:对于经常需要导入excel模板或数据来解析后加以应用的,使用频率非常之高,做了一个比较稳定的版本,体现在这些地方 工具:org.apache.poi 使用前必须了解这些: 1.要解析,那肯定先判 ...

  5. SXSSFWorkbook使用——使用excel模板

    public class Hello {public static void main(String[] args) {// 1.导入excel模板String targetPath = rs.get ...

  6. 微信小程序学习day02-WXSS 模板样式

    目录 WXSS 模板样式-介绍: 1. 什么是 WXSS: 2. WXSS 和 CSS 的关系: WXSS 模板样式 - rpx : 2. rpx 的实现原理: 3. rpx 与 px 之间的单位换算 ...

  7. java excel 模板_java对Excel模板的读取

    java如何读取Excel简单模板 场景:对于经常需要导入Excel模板或数据来解析后加以应用的,使用频率非常之高,做了一个比较稳定的版本,体现在这些地方 工具:org.apache.poi 使用前必 ...

  8. php单元格字体颜色,PHPExcel API接口用法大全,按模板导入excel,美化excel,导出图片,设置单元格字体颜色背景色边框,合并单元格,设置行高列宽...

    PHPExcel API接口用法大全,按模板导入excel,美化excel,导出图片,设置单元格字体颜色背景色边框,合并单元格,设置行高列宽 2020-08-31 85 一:读取excel表模板$ph ...

  9. 【vue+springboot】excel模板下载、导入功能实现

    基于VUE+SpringBoot实现excel模板下载.导入功能 背景 最近在工作中经常遇到批量导入的功能,而且前端还要提示导入成功几条.失败几条.哪一条数据重复.是哪一条导入的数据出现问题等,抽空写 ...

最新文章

  1. 如何通过结构化智能体完成物理构造任务?| 技术头条
  2. 微信小程序-canvas绘制文字实现自动换行
  3. P3163 [CQOI2014]危桥
  4. spring boot+mybatis 系列
  5. 20170813xlVBA跨表筛选数据
  6. 在线数据链路跟踪的平台化发展及思考
  7. Android中转到定义怎么,Android中添加自己的模块 【转】
  8. matlab幻方变换_幻方变换加密数字全息图
  9. 【iOS】lipo otool 动、静态库
  10. 华硕a53s拆机图解_华硕a53s_拆机教程_图解_20140228更正
  11. spring 解决循环依赖
  12. 根据经纬度查询具体地址
  13. 乐鑫ESP32模组如何查看内部flash芯片支持的工作模式(QIO、QOUT、DIO、DOUT)?
  14. Win7下eclipse ADT调试cocos2dx-lua工程
  15. javax.crypto.Cipher类--加密和解密
  16. 对计算机专业英语的建议,中职计算机专业英语教学现况与建议论文
  17. atmel c keil 包_Atmel SAM D21开发板试用心得 ——利用Keil5,全速运行
  18. spring中遇到的java.lang.ClassCastException中cannot be cast to报错(初学)
  19. plc是一种工业控制用的专用计算机,PLC(可编程控制器)与MC(微机)控制的区别
  20. 通信专业顶刊_通信类顶级会议及期刊

热门文章

  1. 设计企业数字化转型规划
  2. APP测试/web测试/H5测试的区别
  3. springfox-swagger
  4. Python配置镜像源的三种方法
  5. IL2CPP的原理(生成)机制
  6. App防止网络请求被代理抓包的解决方法
  7. 如何用200元打造自己的4G数传模块
  8. 一个好的产品是如何做好兼容性测试的?
  9. 数组和链表的区别浅析
  10. 如何在操作系统中快速查询机器的序列号