maven 依赖

<!-- java poi -->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version>
</dependency>
<!--支持xlsx读取-->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.17</version>
</dependency>

工具类

package com.kurumi.util;import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.util.CollectionUtils;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.MethodDescriptor;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Pattern;/*** @author chenlong* @create 2022-03-09 20:20** excel 工具类*/
public class ExcelUtil {/*** 将 list 导入 excel* @param list list 数据列表* @param obj list 的实体对象* @param fileName 文件名称* @param response response*/public static void writeListToExcel(List<?> list, Class obj, String fileName, HttpServletResponse response) {ExcelUtil.writeListToExcel(list,obj,null,null,fileName,response);}/*** 将 list 导入 excel* @param list list 数据列表* @param obj list 的实体对象* @param rows 导出的列* @param fileName 文件名称* @param response response*/public static void writeListToExcel(List<?> list, Class obj,String[] rows,String fileName, HttpServletResponse response) {ExcelUtil.writeListToExcel(list,obj,null,rows,fileName,response);}/*** 将 list 导入 excel* @param list list 数据列表* @param obj list 的实体对象* @param header 表头数组  (为 null 时,实体类中属性名作为表头)* @param rows 导出的列  (为 null 导出所有列)* @param fileName 文件名称* @param response response*/public static void writeListToExcel(List<?> list, Class obj, String[] header, String[] rows,String fileName, HttpServletResponse response) {try {//1.创建工作簿Workbook book = new XSSFWorkbook();//2.创建 sheet 页Sheet sheet = book.createSheet();//获取 get 方法List<Method> methods = new LinkedList<>();if (rows == null || rows.length == 0) {//获取实体类中所有列 get 方法BeanInfo beanInfo = Introspector.getBeanInfo(obj);MethodDescriptor[] methodDescriptors = beanInfo.getMethodDescriptors();for (int i = 0; i < methodDescriptors.length; i++) {String method = methodDescriptors[i].getName();if (Pattern.matches("[g][e][t]\\w*",method) && !"getClass".equals(method)) {methods.add(methodDescriptors[i].getMethod());}}} else {//获取指定列的 get 方法for (int i = 0; i < rows.length; i++) {PropertyDescriptor propertyDescriptor = new PropertyDescriptor(rows[i], obj);methods.add(propertyDescriptor.getReadMethod());}}if (header == null || header.length == 0) {header = new String[methods.size()];for (int i = 0; i < header.length; i++) {String methodName = methods.get(i).getName();header[i] = methodName.substring(3,4).toLowerCase() + methodName.substring(4);}}//3.创建表头Row headerRow = sheet.createRow(0);CellStyle headerStyle = getHeaderStyle(book);setHeaderRow(header, headerRow, headerStyle);//4.填充数据int sheetFlag = 0;if (!CollectionUtils.isEmpty(list)) {for (int i = 0; i < list.size(); i++) {//超过最大行数,自动创建下一页if ((i+1)%1048575 == 0) {sheet = book.createSheet("sheet" + sheetFlag);headerRow = sheet.createRow(0);setHeaderRow(header, headerRow, headerStyle);sheetFlag ++;}//getLastRowNum 获取行标(表头行标为 0)Row row = sheet.createRow(sheet.getLastRowNum() + 1);Object o = list.get(i);for (int j = 0; j < methods.size(); j++) {Object value = methods.get(j).invoke(o);row.createCell(j).setCellValue(value != null ? value.toString() : "-");}}}//5.将 excel 表格导出response.setContentType("application/vnd.ms-excel;charset=utf-8");response.setCharacterEncoding("utf-8");response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes(StandardCharsets.UTF_8),"ISO8859-1") + ".xlsx");ServletOutputStream outputStream = response.getOutputStream();book.write(outputStream);outputStream.close();} catch (Exception e) {e.printStackTrace();}}/*** 设置表头* @param header* @param headerRow* @param headerStyle*/private static void setHeaderRow(String[] header, Row headerRow, CellStyle headerStyle) {for (int i = 0; i < header.length; i++) {Cell headerCell = headerRow.createCell(i);headerCell.setCellValue(header[i]);headerCell.setCellStyle(headerStyle);}}/*** 表头样式* @param book*/private static CellStyle getHeaderStyle(Workbook book) {CellStyle headerStyle = book.createCellStyle();Font headerFont = book.createFont();headerFont.setBold(true); //设置粗体headerFont.setFontName("表头加粗字体");headerStyle.setFont(headerFont);return headerStyle;}}

ExcelUtil 工具类相关推荐

  1. Java Excel导出复杂excel表格样式之ExcelUtil工具类

    Java Excel导出包括普通导出及复杂表格样式,主要是对于需要进行行列合并的列进行特殊处理,计算清楚起始行,结束行,起始列,结束列. 普通导出可以是所有列,也可以是包含某些列,或者排除某些列: 1 ...

  2. excelutil java_JAVA实现Excel的读取--ExcelUtil工具类

    dream.jpg 首先声明一点,这是自己的写法,并不是标准写法,标准写法可以google一下. 主要运用的apache的POI包中的类. 1.首先创建一个ExcelUtil的工具类,并且把自己需要的 ...

  3. 四、EasyExcel实现Excel读写,封装工具类

    在项目中,我们经常用到EasyExcel框架实现:对Excel文件的读写操作.为了方便后续其他项目中的使用,将对Excel文件的读写操作,封装成工具类. 一.EasyExcel实现Excel读写,封装 ...

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

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

  5. 读写Excel工具类ExcelUtil

    突然要用到Excel的读写操作,自己写太过麻烦,在网上找了好久找到个还不错的工具类,怕自己忘掉,分享出来,也留个记录,以后可以直接拿来用. 这个工具类分三个部分: ExcelUtil.java  // ...

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

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

  7. SpringBoot+Hutool工具类Excel工具-ExcelUtil实现excel文件的导入导出

    Hutool会用的话极大了简化了操作Excel的过程,提高开发效率,废话少说上代码. excel文件导出: public void downLoadFile(UserDto dto,HttpServl ...

  8. Excel 导入导出、样式设计、Excel各种工具类整合,FileUtil、ExcelUtil

    2022-12-09 今天整理一下最近的excel导入导出经验,整理出了几个工具类,放心使用,可应付8成需求 excel导入导出现实需求可能很复杂,但基本都可以通过原生和easyexcel配合实现,开 ...

  9. 使用回调方式写POI导入excel工具类

    场景是这样的:为了做一个excel导入的功能,为了尽可能的写一个通用的工具类,将与poi有关的东西都封装起来,以便以其他人员只用关心自己的业务,不用和poi打交道. 写到最后,现在还是会有poi的东西 ...

最新文章

  1. Android中对Log日志文件的分析[转]
  2. 我是 Redis,MySQL 大哥被我害惨了!
  3. 求助关于exchange2010使用手册
  4. [云炬创业学笔记]第二章决定成为创业者测试13
  5. 两个单链表相交的一系列问题----0_0
  6. db文件 linux查看工具,Linux最大文件句柄数查看及修改
  7. 在 Microsoft word中插入代码
  8. 快速使用redis保存session信息
  9. makefile模板
  10. Python搭建环境
  11. mysql data目录 恢复_利用mysql data文件夹恢复数据
  12. python讲统计学 书籍_数据分析最需要的12本中文书(从入门到高阶)
  13. 施乐j75服务器电源管理系统,富士施乐推出印刷系统 Color J75 Press
  14. VMware16虚拟机:安装Windows10系统---超详细教程
  15. 少年中国说 梁启超
  16. 成为CTO的关键技能是什么?
  17. c语言输入名字判断姓是否缩写,C语言复习笔记
  18. 数据结构1 - 向量
  19. 装机、做系统必备:秒懂MBR和GPT分区表
  20. 上海疫情后一个前端的面试心路历程

热门文章

  1. Linux大杂烩(扩展)
  2. 数据产品经理的招聘JD
  3. 魔兽世界转服务器显示完成,《魔兽世界》怀旧服完成进度曝光,连画面、战斗公式都原味还原...
  4. SVN 在idea 中无法查看历史记录
  5. 卡迪夫城市大学计算机专业硕士,2020年卡迪夫城市大学研究生(硕士)学制是几年...
  6. JAVA1V1人机对战游戏
  7. day46第九章动态规划(二刷)
  8. 数字1的个数(思维/数学)
  9. PeckShield宣布与Cobo钱包达成安全战略合作
  10. 风林火山高级java工程师面试题