pom文件导入需要的依赖包

<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.0.0-beta5</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>

前端代码

<input id="cert" type="file" /><input type="button" value="上传" onclick="submit2();" />//通过form表单导出excel的方法function postExcelFile(params, url) { //params是post请求需要的参数,url是请求url地址var form = document.createElement("form");form.style.display = 'none';form.action = url;form.method = "post";document.body.appendChild(form);for(var key in params){var input = document.createElement("input");input.type = "hidden";input.name = key;input.value = params[key];form.appendChild(input);}form.submit();form.remove();}function submit2(){var type = "file";          //后台接收时需要的参数名称,自定义即可var id = "cert";            //即input的id,用来寻找值var formData = new FormData();formData.append(type, $("#"+id)[0].files[0]);    //生成一对表单属性$.ajax({type: "POST",           //因为是传输文件,所以必须是posturl: '../MatterInfoController/importExcel',         //对应的后台处理类的地址data: formData,processData: false,contentType: false,success: function (data) {alert(data);}});}

controller层

 /*** 导入excel方法* @param file* @return*/@RequestMapping("/importExcel")public void importExcel(@RequestParam("file") MultipartFile file)  {System.out.println("进入后台"+file.getOriginalFilename());//实例化工具类Excel<MatterInfo> excel = new Excel<>();//调用导入方法List<MatterInfo> list = excel.importExcel(file, MatterInfo.class);System.out.println("导入的数据"+list);}

实体类

package com.buba.goods.pojo;import com.buba.goods.annotation.ExcelCell;
import lombok.Data;/**
@@ -7,13 +8,22 @@ import lombok.Data;*/
@Data
public class MatterInfo {@ExcelCell(value="货物编号",type = "")private String itemsInfoNo;@ExcelCell(value="货物名称",type = "")private String itemsName;@ExcelCell(value="货物产地",type = "")private String itemsProduction;@ExcelCell(value="货物规格",type = "")private String itemsScale;private Integer itemsCounts;@ExcelCell(value="货物可供数量",type = "")private String itemsCounts;@ExcelCell(value="货物采购合同号",type = "")private String itemsOrderNo;@ExcelCell(value="货物加工合同号",type = "")private String itemsAddNo;@ExcelCell(value="货物运输合同号",type = "")private String itemsTtranNo;@ExcelCell(value="货物入库合同号",type = "")private String itemsInStoreNo;
}

工具类

package com.buba.util;import com.buba.goods.annotation.ExcelCell;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;public class Excel<T>{/*** 导入excel工具类* @param file* @throws Exception*/public List<T> importExcel( MultipartFile file,Class<T> c)  {//创建集合储存excel中的对象List<T> list = new ArrayList<>();List<Field> declaredFields = filterField(c.getDeclaredFields());try {InputStream inputStream = file.getInputStream();//HSSFWorkbook hssfWorkbook = new HSSFWorkbook(inputStream);//遍历excel中的页数for (int k = 0;k < hssfWorkbook.getNumberOfSheets();  k++) {//获取excel中的页HSSFSheet sheetAt = hssfWorkbook.getSheetAt(k);//获取行数int lastRowNum = sheetAt.getLastRowNum();// 获取类中的所有属性信息for (int i = 1; i < lastRowNum; i++) {//获取行中的单元格HSSFRow row = sheetAt.getRow(i);//创建对象装入每行的数据T ob = c.getConstructor().newInstance();//遍历对象中的属性集合for (int j = 0; j < declaredFields.size(); j++) {//判断实体类中的属性的数据类型if (declaredFields.get(j).getType().getCanonicalName().contains("Integer")){//调用方法获取对象的set方法并将单元格中的值赋值给对象getSetMethod(ob, declaredFields.get(j).getName().toString(),Integer.valueOf(row.getCell(j).toString()));}if (declaredFields.get(j).getType().getCanonicalName().contains("String")){//调用方法获取对象的set方法并将单元格中的值赋值给对象getSetMethod(ob, declaredFields.get(j).getName().toString(),row.getCell(j).toString());}if (declaredFields.get(j).getType().getCanonicalName().contains("Long")){//调用方法获取对象的set方法并将单元格中的值赋值给对象getSetMethod(ob, declaredFields.get(j).getName().toString(),Long.valueOf(row.getCell(j).toString()));}if (declaredFields.get(j).getType().getCanonicalName().contains("Float")){//调用方法获取对象的set方法并将单元格中的值赋值给对象getSetMethod(ob, declaredFields.get(j).getName().toString(),Float.valueOf(row.getCell(j).toString()));}if (declaredFields.get(j).getType().getCanonicalName().contains("Short")){//调用方法获取对象的set方法并将单元格中的值赋值给对象getSetMethod(ob, declaredFields.get(j).getName().toString(),Short.valueOf(row.getCell(j).toString()));}if (declaredFields.get(j).getType().getCanonicalName().contains("Double")){//调用方法获取对象的set方法并将单元格中的值赋值给对象getSetMethod(ob, declaredFields.get(j).getName().toString(),Double.valueOf(row.getCell(j).toString()));}if (declaredFields.get(j).getType().getCanonicalName().contains("BigDecimal")){//调用方法获取对象的set方法并将单元格中的值赋值给对象getSetMethod(ob, declaredFields.get(j).getName().toString(),new BigDecimal(row.getCell(j).toString()));}}//把对象添加到集合中list.add(ob);}}} catch (IOException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}System.out.println(list);return list;}/*** 导出Excel*
@@ -21,7 +102,7 @@ public class Excel<T>{* @param response  下载需要的响应对象* @throws Exception*/public void importExcel(String excelName, List<T> dataList, Class<T> c, HttpServletResponse response) throws Exception {public void exportExcel(String excelName, List<T> dataList, Class<T> c, HttpServletResponse response) throws Exception {//创建HSSFWorkbook对象 poi操作Excel对象HSSFWorkbook wb = new HSSFWorkbook();//建立sheet对象
@@ -30,6 +111,7 @@ public class Excel<T>{
//------------------ 设置Excel表头信息// 获取类中的所有属性信息Field[] declaredFields = c.getDeclaredFields();System.out.println(declaredFields);//创建Excel的表头 创建行RowHSSFRow firstRow = sheet.createRow(0);// 获取要导出的类中有多少个属性
@@ -37,8 +119,8 @@ public class Excel<T>{for (int j = 0; j < cellLength; j++) {// 在行中创建单元格HSSFCell cell = firstRow.createCell(j);// 把属性名写入到单元格中cell.setCellValue(declaredFields[j].getName());// 把属性名上标注的注解写入到单元格中cell.setCellValue(String.valueOf(declaredFields[j].getAnnotation(ExcelCell.class).value()));}//------------------ 关于导出的具体数据
@@ -57,7 +139,7 @@ public class Excel<T>{cell.setCellValue("");break;}// 向单元格中添加值 添加的是对象中属性的值 get方法// 向单元格中添加值 添加的是对象的get方法cell.setCellValue(getGetMethod(t, declaredFields[j].getName()).toString());}}
@@ -72,6 +154,29 @@ public class Excel<T>{output.close();}/*** 根据属性,获取set方法* @param obj  对象* @param name 属性名* @return  该方法返回值* @throws Exception*/public Object getSetMethod(Object obj, String name,Object val) throws Exception {// 获取该类中所有的方法 get set toStringMethod[] declaredMethod  = obj.getClass().getMethods();for (int i = 0; i < declaredMethod .length; i++) {// get+属性名if (("set" + name).toLowerCase().equals(declaredMethod [i].getName().toLowerCase())) {// 执行该对象的get方法 方法.invoke(对象)return declaredMethod [i].invoke(obj,val);}}return null;}/*** 根据属性,获取get方法* @param obj  对象
@@ -91,4 +196,19 @@ public class Excel<T>{}return null;}/*** 字段过滤** @param fields* @return*/private List<Field> filterField(Field[] fields) {List<Field> list = new ArrayList<>();for (Field field : fields) {if (field.isAnnotationPresent(ExcelCell.class))list.add(field);}return list;}
}

Excel单元格注解类

package com.buba.goods.annotation;import java.lang.annotation.*;/*** Excel单元格注解**/
// 作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
@Target(ElementType.FIELD)
//作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
@Retention(RetentionPolicy.RUNTIME)
// @Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。
@Documented
public @interface ExcelCell {String value() default "";String type() default "";
}

springBoot上传excel表格数据相关推荐

  1. springboot上传excel表格到数据库

    1.引入相关poi依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi< ...

  2. python 通过上传excel对数据分割分组导出

    废话不多说,直接开讲! 昨天接到任务:通过上传excel表格数据,对数据进行500一组分组分割到excel表格进行导出!说实在的,这个问题并不常见!但是感觉可以实现,于是乎今天写博客记录下! 好了,废 ...

  3. 【Vue】vue2上传Excel表格到后台 实战教程(接上一篇下载Excel模板表格到本地)

    参考文章 作者原文链接入口 项目场景: 关于数据新增,需要从后台下载一个Excel表格,然后在表格里面添加数据,再上传给后台,后台做解析处理,往数据库添加数据 问题描述 需要用到elementUI的文 ...

  4. 自己做项目时整理的上传Excel表格

    Thinkphp5实现导入excel表格 (1)下载PHPExcel-1.7.7(jb51.net) 插件 (2)将其下的Classes 解压到框架vendor文件夹下并进行重命名 (3)前端代码 ( ...

  5. 前端 js 上传excel表格、文件

    一.场景 产品给了个设计图,需要点击[自定义]图标或者其他图片来完成上传的动作.(打开选择文件弹窗,并选择文件) 思路:利用 input-type 的 "file" 属性来完成. ...

  6. 微信公众号怎样上传excel表格?

    通过 微附件 小程序,可以在微信公众号上传excel文件,推送excel文件. 第一步:将附件上传到"微附件"小程序,或官方网站,这里只演示上传到官网的. 第二步:在微信公众号后台 ...

  7. java excel导入前台_java上传excel表格并读取数据返回到前台

    如果你对里面的代码不熟悉不知道的话,建议先浏览一遍代码再拿去用, 这里我介绍一下这个过程的思路: 1.定义变量那些就不说了 , 2.首先是上传文件并保存的代码 3.根据excel表的路径来读取文件,之 ...

  8. php使用excel表格数据处理,php上传excel表格并获取数据

    这个是最近需要做的一个功能,在网上也查看了很多相关的文章,基本上大同小异,在这里整理一下. 一:首先是html部分 二:就是去接收和处理上传的文件了.php部分 //文件存放的路径 $save_pat ...

  9. php 上传 读取 excel,php上传excel表格并获取数据

    这个是最近需要做的一个功能,在网上也查看了很多相关的文章,基本上大同小异,在这里整理一下. 一:首先是html部分 二:就是去接收和处理上传的文件了.php部分 //文件存放的路径 $save_pat ...

最新文章

  1. 《Windows PowerShell实战指南(第2版)》——3.4 使用帮助找命令
  2. linux添加美式键盘,win8\win server 2012添加【中文--美式键盘】
  3. 【caffe】create_cifar10.sh在windows下解决方案
  4. android 获取第三方应用程序包名并启动,android 获取第三方应用程序包名并启动...
  5. Ubuntu文本编辑(vi和nano)命令
  6. [Erlang危机](5.1.1)内存
  7. linux系统在pe下查看ip地址,pe下查看原系统ip的方法_网站服务器运行维护
  8. JS中apply和call的应用和区别
  9. php代码怎么修改成laravel,Laravel框架实现即点即改功能的方法分析
  10. leetcode 6 --- convertZ
  11. assets和res/raw的用法
  12. http://blog.sina.com.cn/s/blog_6145ed810102vr8k.html
  13. python教程-Python快速教程
  14. Codeforces Round #237 (Div. 2)
  15. openwrt: Makefile 框架分析[转载]
  16. linux刷windows phone,老机焕新生!Lumia 950XL也能跑Win10
  17. 中药的专利标准化研究
  18. MATLAB基础教程(xlsread和xlswrit函数+数据拟合+数值计算)
  19. Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(6):音频
  20. uniapp苹果无法上架_uniapp无法上架IOS包怎么办

热门文章

  1. rtmp直播拉流安卓开发
  2. 数据可视化系列-05数据分析报告
  3. 《Weighted Maximum Mean Discrepancy for Unsupervised Domain Adaptation》论文阅读
  4. php 赠送礼品功能开发,类似礼物说送礼提醒的功能该怎么做?
  5. discuz论坛出现“请求来路不明”提示的解决方法
  6. python之独热编码的实现
  7. English Learning - L2 第 9 次小组纠音 辅音 [s] [z] [ʃ] [ʒ] [h] [ʧ] [ʤ] 2023.3.25 周六
  8. 轻轻松松磁盘整理巧用UltimateDefrag软件
  9. 微信王者服务器怎么删掉,王者荣耀怎么删除微信好友 又快又好
  10. 端口映射工具PortTunnel