pom.xml

       <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.4</version></dependency>

controller方法:

public JSONObject readExcelCenter(MultipartFile file) throws Exception {JSONObject jsonObject = new JSONObject();int success = 0;int error = 0;List<DCenterDemandEntity> list = ExcelUtil.readDCenterDemandEntityExcel(file);for(DCenterDemandEntity dCenterDemandEntity : list){boolean bool = dCenterDemandService.saveImport(dCenterDemandEntity);if(bool){success += 1;}else{error += 1;}}jsonObject.put("successNum",success);jsonObject.put("error",error);jsonObject.put("success",true);return jsonObject;}

实体:

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.BaseRowModel;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.ToString;import java.io.Serializable;
import java.util.Date;/*** <p>** </p>** @author author* @since 2021-10-12*/
@Data
@ToString
public class DCenterDemandEntity extends BaseRowModel implements Serializable {private static final long serialVersionUID = 1L;/*** 城市*/@ExcelProperty(index = 0)@ApiModelProperty(value = "城市")private String cityName;/*** 需求内容*/@ExcelProperty(index = 1)@ApiModelProperty(value = "需求")private String content;/*** 领域*/@ExcelProperty(index = 2)private String field;
}

ExcelUtil工具类:

package com.pro.main.utils;import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.metadata.BaseRowModel;
import com.alibaba.excel.metadata.Sheet;
import com.pro.main.fill.entity.DCenterDemand;
import com.pro.main.fill.entity.excelEntity.DCenterDemandEntity;
import com.pro.main.fill.entity.excelEntity.DProjectDemandEntity;
import com.pro.main.fill.entity.excelEntity.DProjectGroundEntity;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;/*** ExcelUtil* 基于easyExcel的开源框架,poi版本3.17* BeanCopy ExcelException 属于自定义数据,属于可自定义依赖* 工具类尽可能还是需要减少对其他java的包的依赖** @author wenxuan.wang* @update zhaojk*/
public class ExcelUtil {/*** 私有化构造方法*/private ExcelUtil() {}private static List<?> readExcel(String path, Class<? extends BaseRowModel> clazz) throws Exception {if (StringUtils.isNotEmpty(path)) {File file = new File(path);if (!file.exists()) {throw new Exception("文件不存在 !");}InputStream inputStream = new FileInputStream(file);BufferedInputStream bis = new BufferedInputStream(inputStream);return readExcel(bis, clazz);}return null;}private static List<?> readExcel(File file, Class<? extends BaseRowModel> clazz) throws Exception {if (file != null && file.exists()) {InputStream inputStream = new FileInputStream(file);BufferedInputStream bis = new BufferedInputStream(inputStream);return readExcel(bis, clazz);}return null;}private static List<?> readExcel(InputStream inputStream, Class<? extends BaseRowModel> clazz) throws Exception {return readExcel(inputStream, null, clazz);}private static List<?> readExcel(MultipartFile excelFile, Class<? extends BaseRowModel> clazz) throws Exception {if (excelFile != null) {return readExcel(excelFile.getInputStream(), null, clazz);}return null;}public static List<?> readExcel(InputStream inputStream, Object customContent, Class<? extends BaseRowModel> clazz) throws Exception {ExcelListener excelListener = new ExcelListener();ExcelReader excelReader;if (inputStream instanceof BufferedInputStream) {excelReader = new ExcelReader(inputStream, customContent, excelListener);} else {excelReader = new ExcelReader(new BufferedInputStream(inputStream), customContent, excelListener);}excelReader.read(new Sheet(1, 1, clazz));return excelListener.getDataList();}public static List<DCenterDemandEntity> readDCenterDemandEntityExcel(MultipartFile file) throws Exception{List<?> list = readExcel(file,DCenterDemandEntity.class);return BeanCopy.convert(list, DCenterDemandEntity.class) ;}public static List<DProjectDemandEntity> readDProjectDemandEntityExcel(MultipartFile file) throws Exception{List<?> list = readExcel(file,DProjectDemandEntity.class);return BeanCopy.convert(list, DProjectDemandEntity.class) ;}public static List<DProjectGroundEntity> readDProjectGroundEntityExcel(MultipartFile file) throws Exception{List<?> list = readExcel(file,DProjectGroundEntity.class);return BeanCopy.convert(list, DProjectGroundEntity.class) ;}
}

ExcelListener:

package com.pro.main.utils;import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;public class ExcelListener extends AnalysisEventListener {private List<Object> dataList = new ArrayList<>();/*** 通过 AnalysisContext 对象还可以获取当前 sheet,当前行等数据*/@Overridepublic void invoke(Object object, AnalysisContext context) {if (!checkObjAllFieldsIsNull(object)) {dataList.add(object);}}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {}private static final String SERIAL_VERSION_UID = "serialVersionUID";/*** 判断对象中属性值是否全为空*/private static boolean checkObjAllFieldsIsNull(Object object) {if (null == object) {return true;}try {for (Field f : object.getClass().getDeclaredFields()) {f.setAccessible(true);//只校验带ExcelProperty注解的属性ExcelProperty property = f.getAnnotation(ExcelProperty.class);if (property == null || SERIAL_VERSION_UID.equals(f.getName())) {continue;}if (f.get(object) != null && MyStringUtils.isNotBlank(f.get(object).toString())) {return false;}}} catch (Exception e) {//do something}return true;}public List<Object> getDataList() {return dataList;}
}

BeanCopy:

package com.pro.main.utils;import org.springframework.beans.*;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.core.convert.ConversionService;
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.support.DefaultConversionService;
import org.springframework.core.convert.support.GenericConversionService;
import org.springframework.util.Assert;import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;public class BeanCopy {private final class DateToStringConverter implements Converter<Date, String> {private DateFormat df ;private DateToStringConverter(String format) {df = new SimpleDateFormat(format);}@Overridepublic String convert(Date source) {return df.format(source);}}private static final String DATE_FORMAT = "yyyy-MM-dd";private static Object convertForProperty(Wrapper wrapper, Object object, Object value, String propertyName)throws TypeMismatchException {Object result;if (wrapper == null) {result = null;} else {wrapper.setWrappedInstance(object);result = wrapper.getBeanWrapper().convertForProperty(value, propertyName);}return result;}private static Object copyProperties(Object source, Object target) throws BeansException {Wrapper wrapper = new BeanCopy().new Wrapper(source);copyProperties(wrapper, source, target);return target;}/*** Copy the property values of the given source bean into the target bean.* <p>* Note: The source and target classes do not have to match or even be derived from each other, as long as the properties match. Any bean* properties that the source bean exposes but the target bean does not will silently be ignored.* <p>* This is just a convenience method. For more complex transfer needs, consider using a full BeanWrapper.* * @param source*            the source bean* @param target*            the target bean* @throws BeansException*             if the copying failed*/private static void copyProperties(Wrapper wrapper, Object source, Object target) throws BeansException {Assert.notNull(source, "Source must not be null");Assert.notNull(target, "Target must not be null");Class<?> actualEditable = target.getClass();PropertyDescriptor[] targetPds = BeanUtils.getPropertyDescriptors(actualEditable);for (PropertyDescriptor targetPd : targetPds) {if (targetPd.getWriteMethod() != null) {PropertyDescriptor sourcePd = BeanUtils.getPropertyDescriptor(source.getClass(), targetPd.getName());if ( sourcePd.getReadMethod() != null) {try {Method readMethod = sourcePd.getReadMethod();if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) {readMethod.setAccessible(true);}Object value = readMethod.invoke(source);// 判断是否类型不一致if (value != null && !(targetPd.getPropertyType().isInstance(value))) {// 数据转型value = convertForProperty(wrapper, target, value, targetPd.getName());}Method writeMethod = targetPd.getWriteMethod();if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers())) {writeMethod.setAccessible(true);}writeMethod.invoke(target, value);} catch (Exception ex) {throw new FatalBeanException("Could not copy properties from source to target", ex);}}}}}private final class Wrapper {private GenericConversionService conversion;private BeanWrapperImpl bean;private Wrapper(Object object) {conversion = initDefaultConversionService();bean = initDefaultBeanWrapper(conversion, object);}private void setWrappedInstance(Object object) {bean.setWrappedInstance(object);}private GenericConversionService initDefaultConversionService() {GenericConversionService conversionService = new DefaultConversionService();conversionService.addConverter(new DateToStringConverter(DATE_FORMAT));return conversionService;}private BeanWrapperImpl initDefaultBeanWrapper(@SuppressWarnings("hiding") ConversionService conversion,Object object) {BeanWrapperImpl beanWrapper = new BeanWrapperImpl(object);beanWrapper.setConversionService(conversion);SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);dateFormat.setLenient(false);beanWrapper.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));return beanWrapper;}private BeanWrapperImpl getBeanWrapper() {return bean;}}/*** 复制源对象到目的对象*/private static void convert(Object source, Object target) {copyProperties(source, target);}public static <T> List<T> convert(List<?> sources, Class<T> targetClass) {List<?> sourcesObj = sources;if (sourcesObj == null) {sourcesObj = Collections.emptyList();}List<T> targets = new ArrayList<>(sourcesObj.size());BeanCopy.convert(sourcesObj, targets, targetClass);return targets;}private static <T> void convert(List<?> sources, List<T> targets, Class<T> targetClass) {if (targets == null) {return;}targets.clear();if (sources == null) {return;}for (Object obj : sources) {try {T target = targetClass.newInstance();targets.add(target);convert(obj, target);} catch (Exception e) {//do somethingreturn;}}}
}

MyStringUtils:

package com.pro.main.utils;public class MyStringUtils {private MyStringUtils() {}/*** 与StringUtils.isEmpty()的区别在于只有空格的字符串也返回true* @param cs* @return*/private static boolean isBlank(final CharSequence cs) {int strLen;if (cs == null || (strLen = cs.length()) == 0) {return true;}for (int i = 0; i < strLen; i++) {if (!Character.isWhitespace(cs.charAt(i))) {return false;}}return true;}public static boolean isNotBlank(final CharSequence cs) {return !isBlank(cs);}
}

java集成easyApi实现excel数据导入相关推荐

  1. java自定义注解实现excel数据导入导出,设置单元格数据验证与生成省市区多列联动效果

    本文通过自定义注解实现excel数据导入导出.以及设置excel文件中列数据验证,即用户在excel文件中输入数据时就可以对数据格式验证是否符合,节省了程序中过多的数据验证操作,注解还额外提供了一系列 ...

  2. Java带图片的excel数据导入

    带图片的EXCEL数据导入 这里使用的是POI,所以这里使用的很杂,不过方便对它们的了解.模板下载与图片导出到excel都不一样. 下面会把对应连接贴上. 带入依赖:不要使用3.17的版本,直接上代码 ...

  3. 用java把excel数据导入oracle日期转换,Java代码兑现excel数据导入到Oracle

    Java代码实现excel数据导入到Oracle 1.首先需要两个jar包jxl.jar,ojdbc.jar(注意版本,版本不合适会报版本错误) 2.代码: import java.io.File; ...

  4. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)...

     本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较    (三)SSIS的简介    (四)数据库中存储过程示例(SSIS应用需要) (五)Excel模板的制作(这步这么简单,稍微介 ...

  5. 将Excel数据导入mysql数据库的几种方法

    将Excel数据导入mysql数据库的几种方法 "我的面试感悟"有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结 ...

  6. 你知道如何快捷地在Java中使用现有Excel数据创建PPT图表吗?

    Spire.Office for .NET是一套企业级的涵盖 E-iceblue 所有 .NET Office 组件的集合.使用 Spire.Office for .NET,开发人员可以创建大量的用于 ...

  7. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】) 转...

    效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中[附源代码下载])  本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较    ( ...

  8. java poi-ooxml 3.17 excel通用导入导出

    java 使用poi-ooxml 3.17 excel的通用导入导出,导出的样式未做处理,可自行处理 可以在csdn下载或者在gitHub( https://github.com/aojd/excel ...

  9. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中)

    转载:http://www.cnblogs.com/jasenkin/archive/2010/10/06/ssis_package_information.html 本文目录: (一)背景 (二)数 ...

最新文章

  1. 陈天奇:我是如何从机器学习小白一步一步成长为你们心目中的大神的
  2. html代码转换成为纯文本
  3. hdu 4417 Super Mario(可持久化线段树)
  4. 统计学习方法笔记(四)-最大熵模型原理及python实现
  5. sql server 内存初探
  6. python常用内置函数总结-python常用内置函数
  7. 开发中最常使用到那些设计模式?
  8. BIO、NIO、AIO的区别——Netty系列(一)
  9. 聊聊Service(一)
  10. mysql order by if()或order by in()条件排序
  11. python编程竞赛规则_用python实行羽毛球比赛规则。
  12. 中兴通讯推出全球首款Wi-Fi 7标准5G CPE
  13. 乱码385b1b926a38153d38957556c0dc55b5
  14. 2022 软件测试工程师面试题小结【附带答案】
  15. 经常使用的文件工具类
  16. 比赛结束(第二届易观算法大赛)
  17. python2线程池_python 线程池调用类方法不执行?
  18. 免工具获取MIUI主题下载链接
  19. STLink连接与资源下载
  20. FIT2CLOUD飞致云发布DataEase开源数据可视化分析平台

热门文章

  1. 单相精密馈电监控系统应用方案
  2. 手把手教你画漂亮的功能连接矩阵图(附代码)
  3. 蓝桥杯-手机尾号-java
  4. 西装的选购、搭配和穿着
  5. 基于云存储的个性化地图-李乐
  6. 电子巨头Bosch携手Wien Energie演示区块链冰箱
  7. Unity四元数和向量相乘作用及其运算规则
  8. 微信十周年更新8.0最新版本,增加烟花新表情、状态,快来看看还有什么新功能吧
  9. D30|重新安排行程+棋盘问题(N皇后+解数独)
  10. 力控——从运动控制到交互控制