本文共 10686 字,大约阅读时间需要 35 分钟。
前言:
本工具类提供了Excel导入功能,通过反射机制将Excel中数据映射到实体类中,从而获取Excel数据,工具类依赖org.apache.poi
包。支持RESTful API,支持Spring MVC中使用。
一.本工具类支持功能:
- 支持File类型导入
- 支持MultipartFile类型导入
- 支持Excel2003及以上版本
二.工具类
所需jar包依赖org.apache.poi
版本:
org.apache.poi poi 4.1.0
本工具类,可直接在项目中使用:
package com.excel.util;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;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.ss.usermodel.WorkbookFactory;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.multipart.MultipartFile;/** * Excel导入工具类 */public class ImportExcelUtil { // 正则表达式 ,用于判断是get还是set方法 private static final String REGEX = "[a-zA-Z]"; private static final Logger log = LoggerFactory.getLogger(ImportExcelUtil.class); /** * @param multipartFile * @param startRow 开始行 * @param endRow 结束行(0表示到最后一行结束) * @param clazz * @return * @throws Exception */ public static List
三.如何使用:
1.导入MultipartFile类型(推荐)
应用场景: Web页面中通过MultipartFile上传文件,可直接转为List<List<Object>>
。
使用示例:
@PostMapping(value = "/project/import") public ResultObject importAlarmEvents(@RequestParam MultipartFile file) { ResultObject result = new ResultObject(); try { // 从Excel第一行起到最后一行结束, List > excelData = ImportExcelUtil.importExcelMultipartFile(file, 1, 0, EventDTO.class); if (excelData == null || excelData.isEmpty()) { result.setMessage("导入失败,Excel内容为空"); return result; } //将Excel中数据,转为你的实体类 List > alarmList = new ArrayList<>(); for (List list : excelData) { alarmList.add((List ) list); } Map res = eventService.importEvent(alarmList); } catch (Exception e) { result.setMessage(e.getMessage()); } return result; }
2.导入文件格式为File
应用场景: Web页面中通过File上传文件,可直接转为List<List<Object>>
。
使用示例:
@PostMapping(value = "/project/import") public ResultObject importAlarmEvents(@RequestParam File file) { ResultObject result = new ResultObject(); try { // 从Excel第一行起到最后一行结束, List > excelData = ImportExcelUtil.importExcelFile(file, 1, 0, EventDTO.class); if (excelData == null || excelData.isEmpty()) { result.setMessage("导入失败,Excel内容为空"); return result; } //将Excel中数据,转为你的实体类 List > alarmList = new ArrayList<>(); for (List list : excelData) { alarmList.add((List ) list); } Map res = eventService.importEvent(alarmList); } catch (Exception e) { result.setMessage(e.getMessage()); } return result; }
实体类示例:
注意:实体类的属性声明顺序,必须跟Excel列头顺序保持一致,否则会出现列数据和属性名对应不上问题
package com.entity.dto;import java.io.Serializable;/** * 数据转Excel对象 注:属性名的顺序和Excel列顺序必须相同 */@SuppressWarnings("serial")public class EventDTO implements Serializable { // 列字段1 private String name; // 列字段2 private String code; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCode() { return code; } public void setCode(String code) { this.code = code; }}
Excel实用教程集锦
以下是我写的关于Java操作Excel的所有教程,基本包含了所有场景。
1.如果简单导出推荐使用工具类的方式,这种配置最简单。
2.如果对导出样式要求极高的还原度,推荐使用Freemarker方式,FreeMarker模板引擎可以通吃所有Excel的导出,属于一劳永逸的方式,项目经常导出推荐使用这种方式。
3.Freemarker导出的Excel为xml格式,是通过重命名为xls后,每次会打开弹框问题,我在《Freemarker整合poi导出带有图片的Excel教程》也已经完美解决,本教程将直接导出真正的xls格式,完美适配新版office和wps。Freemarker是无法导出带有图片的Excel,通过其他技术手段,也在本教程中完美导出带有图片的Excel。
4.下列教程中的代码都经本人和网友多次验证,真实有效!
↓↓↓↓一揽子Excel解决方案,赶快收藏吧↓↓↓↓
转载地址:http://zqfqz.baihongyu.com/