Java实现Excel导出数据(下载导出) -- 有这一篇就够了

前言:

昨天有个刚毕业学妹来问:

1、如何把数据库的数据写入到excel,
2、如何导出文件到本地、或者上传到服务器又或者返回到浏览器

这里想针对这两个问题做个记录,
突然想写一下专门的excel表格导出到本地,或者返回到浏览器下载的,作者这里使用的是EasyExcel


一、初始化EasyExcel的ExcelWriter

这个是easyexcel中封装好的一个工具,下述是他的注释作用:
Excel Writer 此工具用于通过 POI 将值写出到 Excel。此对象可以执行以下两个功能。
1.创建一个新的空Excel工作簿,填充值后将值写入流。
2. 编辑现有 Excel,写入原始 Excel 文件,或将其写入其他地方。

这里初始化封装了一个方法:也可以自行调用修改

1、下方代码是将数据写入excel并导入到本地的一个方法实现:

    /**
     * 导出数据到excel文件返回到前端浏览器
     * @param filename  文件名
     * @param dataResult    源数据
     * @param clazz 数据类
     * @param toFilePath    本地路径
     */
    public static void exportExcelToLocal(String filename, List<?> dataResult, Class<?> clazz, String toFilePath) {
        OutputStream outputStream = null;
        ExcelWriter excelWriter = null;
        try {
            if (StringUtils.isBlank(filename)) {
                throw new RuntimeException("'filename' 不能为空");
            }
            String fileName = filename.concat(".xlsx");

            // 将文件输出到指定路径
            File file = new File(toFilePath);
            if (!file.exists()) {
                file.mkdirs();
            }
            String filePath = toFilePath + File.separator + fileName;
            outputStream = new FileOutputStream(filePath);

            // 根据不同的策略生成不同的ExcelWriter对象
            excelWriter = getExportExcelWriter(outputStream);

            WriteTable writeTable = EasyExcel.writerTable(0).head(clazz).needHead(true).build();
            WriteSheet writeSheet = EasyExcel.writerSheet(fileName).build();
            // 写出数据
            excelWriter.write(dataResult, writeSheet, writeTable);

        } catch (Exception e) {
            log.error("导出excel数据异常:", e);
            throw new RuntimeException(e);
        } finally {
            closeExcelWriterAndStream(excelWriter, outputStream);
        }
    }

当然如果不封装方法直接将要写的outputstream流与查询出的数据方法即可。

2、下述图片的工具类调用示例:

3、当然最终要的是要数据的对象中需要加一个注释,才能达到自定义列头的效果。

4、这样最终执行出来的效果就出来了

二、如果需要将字段转换则需要自定义转换器

举个简单的例子,比如性别字段,数据库一般存的是tinyint(1),java对象是Boolean,那么想导出的数据变成男、女,则需要再注解后加一个converter了,大概是这样

当然这个转化器需要自己定义,这里给一个我这边用的示例,可以根据代码在自行修改

如果有什么问题可以留言!!!希望能帮到各位初入职场的你