一、添加依赖

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

二、自定义注解

@Target({ElementType.FIELD, ElementType.TYPE})
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface ExcelTag {/*** 表头** @return*/String tag();/*** 字体颜色** @return*/IndexedColors fontColor() default IndexedColors.BLACK;
}

三、工具类

public class ExcelUtils {/*** 解析数据,将inputStream转为List** @param excel* @param clazz* @param <T>* @return* @throws Exception*/public static <T> List<T> parse(InputStream excel, Class<T> clazz) throws Exception {XSSFWorkbook xssfWorkbook = new XSSFWorkbook(excel);XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);XSSFRow titleCell = xssfSheet.getRow(0);List<T> dataList = new ArrayList<>(xssfSheet.getLastRowNum());T datum;Map<String, Field> fieldMap = getFieldMap(clazz);for (int i = 1; i <= xssfSheet.getLastRowNum(); i++) {XSSFRow xssfRow = xssfSheet.getRow(i);datum = clazz.newInstance();int minCell = xssfRow.getFirstCellNum();int maxCell = xssfRow.getLastCellNum();for (int cellNum = minCell; cellNum <= maxCell; cellNum++) {XSSFCell title = titleCell.getCell(cellNum);if (title == null) {continue;}String tag = title.getStringCellValue();Field field = fieldMap.get(tag);if (field == null) {continue;}Class<?> type = field.getType();Object value = null;XSSFCell cell = xssfRow.getCell(cellNum);if (cell == null) {continue;}if (type.equals(String.class)) {cell.setCellType(Cell.CELL_TYPE_STRING);value = cell.getStringCellValue();} else if (type.equals(Date.class)) {value = cell.getDateCellValue();}PropertyUtils.setProperty(datum, field.getName(), value);}dataList.add(datum);}return dataList;}private static <T> Map<String, Field> getFieldMap(Class<T> clazz) {Field[] fields = FieldUtils.getFieldsWithAnnotation(clazz, ExcelTag.class);Map<String, Field> fieldMap = new HashMap<>(fields.length / 3 * 4);for (Field field : fields) {ExcelTag annotation = field.getAnnotation(ExcelTag.class);fieldMap.put(annotation.tag(), field);}return fieldMap;}/*** 导出数据到outputStream** @param outputStream* @param dataList* @param clazz* @param <T>* @throws Exception*/public static <T> void export(OutputStream outputStream, List<T> dataList, Class<T> clazz) throws Exception {XSSFWorkbook wb = new XSSFWorkbook();ExcelTag annotation = clazz.getAnnotation(ExcelTag.class);String tag = annotation.tag();//工作簿XSSFSheet sheet = wb.createSheet(tag);Field[] fields = FieldUtils.getFieldsWithAnnotation(clazz, ExcelTag.class);//表头XSSFRow headers = sheet.createRow(0);for (int index = 0; index < fields.length; index++) {Field field = fields[index];int type = 0;if (String.class.equals(field.getType())) {type = Cell.CELL_TYPE_STRING;}ExcelTag excelTag = field.getAnnotation(ExcelTag.class);XSSFCell cell = headers.createCell(index, type);XSSFCellStyle style = wb.createCellStyle();style.setAlignment(HSSFCellStyle.ALIGN_CENTER);XSSFFont font1 = wb.createFont();font1.setColor(excelTag.fontColor().getIndex());style.setFont(font1);cell.setCellStyle(style);tag = excelTag.tag();cell.setCellValue(tag);sheet.setColumnWidth(index, tag.getBytes().length*256);//设置列宽(中文适用)}//插入数据XSSFRow row;Field field;for (int i = 0; i < dataList.size(); i++) {T datum = dataList.get(i);row = sheet.createRow(i + 1);for (int index = 0; index < fields.length; index++) {field = fields[index];int type = 0;XSSFCell cell = row.createCell(index, type);XSSFCellStyle style = wb.createCellStyle();style.setAlignment(HSSFCellStyle.ALIGN_CENTER);cell.setCellStyle(style);Object property = PropertyUtils.getProperty(datum, field.getName());if (String.class.equals(field.getType())) {cell.setCellValue((String) property);} else if (Integer.class.equals(field.getType())) {cell.setCellValue((Integer) property);}else if (double.class.equals(field.getType())) {cell.setCellValue((double) property);}else if (Date.class.equals(field.getType())) {cell.setCellValue((Date) property);}else {cell.setCellValue((String) property);}}}//生成文档wb.write(outputStream);}
}

四、数据传输对象

package org.lhj.pro.poiImport;import org.apache.poi.ss.usermodel.IndexedColors;
import lombok.Data;@Data
@ExcelTag(tag = "路由信息")
public class RoutingExcelDto {@ExcelTag(tag = "机构编号", fontColor = IndexedColors.RED)private Integer orgCode;@ExcelTag(tag = "机构名称", fontColor = IndexedColors.RED)private String orgName;@ExcelTag(tag = "服务编号", fontColor = IndexedColors.RED)private Integer serviceCode;@ExcelTag(tag = "应用类型")private String applicationType;@ExcelTag(tag = "业务领域")private String businessArea;@ExcelTag(tag = "服务名称")private String serviceName;@ExcelTag(tag = "大版本号", fontColor = IndexedColors.RED)private double bigVersion;@ExcelTag(tag = "小版本号", fontColor = IndexedColors.RED)private double version;@ExcelTag(tag = "服务描述")private String description;@ExcelTag(tag = "系统名称", fontColor = IndexedColors.RED)private String systemName;@ExcelTag(tag = "服务地址", fontColor = IndexedColors.RED)private String servicePath;@ExcelTag(tag = "第三方服务名称", fontColor = IndexedColors.RED)private String thirdServiceName;public RoutingExcelDto(Integer orgCode, String orgName, Integer serviceCode, String applicationType,String businessArea, String serviceName, double bigVersion, double version, String description,String systemName, String servicePath, String thirdServiceName) {super();this.orgCode = orgCode;this.orgName = orgName;this.serviceCode = serviceCode;this.applicationType = applicationType;this.businessArea = businessArea;this.serviceName = serviceName;this.bigVersion = bigVersion;this.version = version;this.description = description;this.systemName = systemName;this.servicePath = servicePath;this.thirdServiceName = thirdServiceName;}public RoutingExcelDto() {super();}}

五、创建 Controller测试

package org.lhj.pro.poiImport;import java.io.FileNotFoundException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;@RestController
@RequestMapping("/import")
public class ImportController {/*** excell导出* @param response* @return* @throws FileNotFoundException* @throws Exception*/@RequestMapping("/exportExcel")public String exportExcel(HttpServletResponse response) throws FileNotFoundException, Exception {List<RoutingExcelDto> dataList = new ArrayList<>();for (int i = 1; i < 10; i++) { RoutingExcelDto routingExcelDto = new RoutingExcelDto(i,"123",new Random().nextInt(1000)+1000, "y", "123", "123", 1.1, 1.11, "123", "123", "123", "123");dataList.add(routingExcelDto);}ServletOutputStream out = response.getOutputStream();String title = new String((new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(new Date())).getBytes(),"UTF-8");response.setHeader("Content-disposition", "filename=" + title +RoutingExcelDto.class.getSimpleName()+ ".xls");ExcelUtils.export(out, dataList, RoutingExcelDto.class);return "导出列表成功!";}/*** excel导入* @param excel* @return List集合*/@RequestMapping("/parseExcel")public List<RoutingExcelDto> parseExcel(MultipartFile excel) {List<RoutingExcelDto> parseList;try {parseList = ExcelUtils.parse(excel.getInputStream(), RoutingExcelDto.class);return parseList;} catch (Exception e) {throw new RuntimeException(e.getMessage());}}
}

Java-Poi导入导出excel工具类相关推荐

  1. springboot使用 poi 导入导出Excel工具类

    转载的一个比较好用的工具类 import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOE ...

  2. Java导入导出Excel工具类ExcelUtil

    前段时间做的分布式集成平台项目中,许多模块都用到了导入导出Excel的功能,于是决定封装一个ExcelUtil类,专门用来处理Excel的导入和导出 本项目的持久化层用的是JPA(底层用hiberna ...

  3. JAVA工具类(17)--Java导入导出Excel工具类ExcelUtil

    实战 导出就是将List转化为Excel(listToExcel) 导入就是将Excel转化为List(excelToList) 导入导出中会出现各种各样的问题,比如:数据源为空.有重复行等,我自定义 ...

  4. 使用阿里开源的EasyExcel导入导出EXCEL——工具类

    工具类 package com.example.demo.util.excel;import com.alibaba.excel.EasyExcel; import com.alibaba.excel ...

  5. poi/jxls导入/导出Excel工具类(支持2003和2007)

    1.ExportUtil导出工具类(根据模板导出),支持2003/2007不同excel格式文件 package org.nercita.bcp.util;import java.io.FileInp ...

  6. java按照模板导出Excel工具类

    准备模板: 模板中使用jxls表达式,详细的jxls表达式使用可以到网上查找.一下给出简单的说明 <jx:forEach items="${results.list}" va ...

  7. 导出excel工具类

    1.excel工具类代码如下 package com.spring.excel.utils; import org.apache.poi.hssf.usermodel.*; import org.ap ...

  8. Java操作大数据量Excel导入导出万能工具类(完整版)

    Java操作大数据量Excel导入导出万能工具类(完整版) 转载自:https://blog.csdn.net/JavaWebRookie/article/details/80843653 更新日志: ...

  9. java导入导出excel_Java导入导出Excel工具 easyexcel

    Java导入导出Excel工具  easyexcel 做Java开发的同学,尤其是做管理后台的同学绝大多数都会接触到报表系统,这时候就少不了Excel的导入和导出了.Java解析生成Excel比较有名 ...

  10. java 兼容excel_Java解析Excel工具类(兼容xls和xlsx)

    依赖jar org.apache.poi poi-ooxml 4.0.1 ExcelUtils.java package javax.utils; import java.io.File; impor ...

最新文章

  1. 新视角来了:《用户体验四维度》
  2. “隐忍”多年的“水果大王”百果园要寻求资本协助了?
  3. flink on yarn HA高可用集群搭建
  4. 正则表达式匹配字符串的问题
  5. 常用中后台交互设计控件使用场景与规范总结
  6. MYSQL 5.1自动安装脚本
  7. 【转】ASP.NET MVC实现权限控制
  8. LeetCode 99. Recover Binary Search Tree
  9. mybatis的mysql参数传递_Mybatis参数传递及返回类型
  10. Java连接数据库访问失败
  11. 谷歌离线地图二次开发源代码
  12. 趋势预测算法大PK!
  13. 文件系统功能 os模块 子模块os.path pickle
  14. FreeRTOS学习笔记——FreeRTOS 时间管理
  15. 在网页标题前添加一个小图标
  16. 不用验证,下载wmp10
  17. PB动态报表格式自由定义的实现
  18. Lab3: 自行车码表
  19. 十大常见食物让牙齿越吃越白。
  20. 机器学习中的评估指标与损失函数

热门文章

  1. qfiledialog保存时为文件名添加后缀
  2. win10计算机联接多个网络,win10两台电脑连接局域网的详细操作教程
  3. 《半小时漫画唐诗》读书摘记
  4. 基于SSM框架的个人博客系统项目毕业设计(代码及论文)
  5. 如何使用Nginx Ingress实现灰度发布和蓝绿发布?
  6. unity Screen.orientation
  7. Redis-使用场景
  8. 戴尔 DELL Inspiron N4050硬件升级及系统安装方面相关的问题阐述与解决思路
  9. Python数据分析基础: 数据缺失值处理
  10. oracle 同义词转换错误,一次对dual表的恢复操作(ORA-00980:同义词转换不再有效错误解决方法) (转载)...