IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> ExcelUtil工具类 -> 正文阅读

[Java知识库]ExcelUtil工具类

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;
    }

}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 21:59:56  更:2022-03-11 22:04:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/1 8:23:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码