写一个简单实用的Excel工具类

我们在开发中经常要将数据导入成Excel表格供展示,也需要解析Excel中的数据,官方提供的api操作太麻烦,这边封装了一个Excel工具类,可以很轻松的实现Excel的操作

首先加入依赖

XML 复制代码
<dependencies>
    <!-- EasyPoi 基本库依赖 -->
    <dependency>
        <groupId>cn.afterturn</groupId>
        <artifactId>easypoi-base</artifactId>
        <version>4.2.0</version>
    </dependency>

    <!-- EasyPoi 注解库依赖 -->
    <dependency>
        <groupId>cn.afterturn</groupId>
        <artifactId>easypoi-annotation</artifactId>
        <version>4.2.0</version>
    </dependency>

    <!-- EasyPoi Web 库依赖 -->
    <dependency>
        <groupId>cn.afterturn</groupId>
        <artifactId>easypoi-web</artifactId>
        <version>4.2.0</version>
    </dependency>
</dependencies>

介绍如下

bash 复制代码
EasyPoi 是一个用于处理 Excel 文件的 Java 库,它提供了各种功能,包括读取和写入 Excel 文件,支持不同的 Excel 格式,以及用于生成 
Excel 报表的工具;这些库依赖项用于在 Java 项目中引入 EasyPoi 的相关功能,以便于可以在应用程序中轻松地处理 Excel 文件;通过添加这些
依赖,可以在项目中使用 EasyPoi 提供的功能来操作 Excel 文件

接下来实现工具类

java 复制代码
public class ExcelUtils {
    /**
     * 根据数据生成excel表格,并将其写入HttpServletResponse。
     *
     * @param name                Excel文件名
     * @param title               表格标题
     * @param entityClass         数据对象的类
     * @param list                数据列表
     * @param httpServletResponse 用于响应的HttpServletResponse对象
     */
    public static void toExcelList(String name, String title, Class<?> entityClass, List<?> list, HttpServletResponse httpServletResponse) {
        // 创建导出参数对象
        ExportParams exportParams = new ExportParams();

        // 设置导出参数的工作表名称为传入的title
        exportParams.setSheetName(title);   

        // 使用EasyPoi库来导出Excel,生成一个Workbook对象
        Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityClass, list);

        // 响应生成的Excel文件给客户端
        responseExcel(name, httpServletResponse, workbook);
    }
 
    /**
     * 将生成的Excel表格保存到本地文件。
     *
     * @param filepath    目标文件路径
     * @param title       Excel标题
     * @param entityClass 数据对象的类
     * @param list        数据列表
     * @throws Exception 如果保存文件时发生异常
     */
    public static void fileExcel(String filepath, String title, Class<?> entityClass, List<?> list) throws Exception {
        // 创建导出参数对象
        ExportParams params = new ExportParams();

        // 设置Excel文件类型为XLSX
        params.setType(ExcelType.XSSF);  

        // 设置工作表名称为传入的title
        params.setSheetName(title);  

        try {
            // 使用EasyPoi库来导出Excel,生成一个Workbook对象
            Workbook workbook = ExcelExportUtil.exportExcel(params, entityClass, list);

            // 将生成的Excel写入到文件
            FileOutputStream fileOutputStream = new FileOutputStream(filepath);

            // 将Workbook对象写入到文件输出流中
            workbook.write(fileOutputStream);  
        } catch (Exception e) {
            // 抛出运行时异常
            throw new Exception("Excel导出失败: " + e.getMessage(), e);  // 抛出异常并包含错误消息
        }
    }
 
    /**
     * 解析Excel表格为List对象
     *
     * @param multipartFile 文件上传对象
     * @param clazz         返回值类型的Class对象
     * @return 表格数据的List
     * @throws Exception 如果解析过程中发生异常
     */
    public static List<?> excelToList(MultipartFile multipartFile, Class<?> clazz) throws Exception {
        // 创建Excel导入参数对象
        ImportParams params = new ImportParams();

        // 设置Excel文件中标题所占的行数,setTitleRows(0)表示Excel文件中没有标题行
        params.setTitleRows(0);

        // 设置Excel文件中表头(列名)所占的行数,setHeadRows(1)表示第一行包含了表头信息
        params.setHeadRows(1);
       
        // 使用EasyExcel工具类导入Excel数据并返回List对象
        return ExcelImportUtil.importExcel(multipartFile.getInputStream(), clazz, params);
    }
 
    /**
     * 将Excel表格写入响应体输出
     *
     * @param name                Excel文件名
     * @param httpServletResponse 响应体对象
     * @param workbook            Excel工作簿对象
     */
    public static void responseExcel(String name, HttpServletResponse httpServletResponse, Workbook workbook) {
        try {
            // 对文件名进行URL编码,处理可能的特殊字符
            name = URLEncoder.encode(name, "UTF-8");

            // 设置响应的字符编码为UTF-8,以确保处理中文字符正确
            httpServletResponse.setCharacterEncoding("UTF-8");

            // 设置响应的Content-Type头,指定响应内容的类型为二进制流
            httpServletResponse.setHeader("Content-Type", "application/octet-stream");

            // 设置Content-Disposition头,提示浏览器以附件形式下载文件,并指定下载的文件名
            httpServletResponse.setHeader("Content-Disposition", "attachment; filename=" + name);

            // 将Workbook对象的内容写入HttpServletResponse的输出流,实现文件下载
            workbook.write(httpServletResponse.getOutputStream());
        } catch (UnsupportedEncodingException e) {
            // 抛出运行时异常,处理不支持的字符编码异常
            throw new RuntimeException(e);
        } catch (IOException e) {
            // 抛出运行时异常,处理文件输出异常
            throw new RuntimeException(e);
        }
    }
}

这个工具类可以直接copy下来,这样就能简单的实现Excel的功能

相关推荐
daidaidaiyu3 小时前
一文学习 工作流开发 BPMN、 Flowable
java
SuniaWang4 小时前
《Spring AI + 大模型全栈实战》学习手册系列 · 专题六:《Vue3 前端开发实战:打造企业级 RAG 问答界面》
java·前端·人工智能·spring boot·后端·spring·架构
韩立学长4 小时前
Springboot校园跑腿业务系统0b7amk02(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
sheji34164 小时前
【开题答辩全过程】以 基于springboot的扶贫系统为例,包含答辩的问题和答案
java·spring boot·后端
m0_726965985 小时前
面面面,面面(1)
java·开发语言
xdscode5 小时前
Linux云服务器安装openclaw,并对接飞书通道
linux·服务器·飞书·openclaw
lswzw5 小时前
win11家庭版 安装 openclaw
服务器
代码栈上的思考5 小时前
消息队列:内存与磁盘数据中心设计与实现
后端·spring
xuhaoyu_cpp_java5 小时前
过滤器与监听器学习
java·经验分享·笔记·学习
LegendNoTitle6 小时前
计算机三级等级考试 网络技术 选择题考点详细梳理
服务器·前端·经验分享·笔记·php