JAVA使用EasyExcel数据库动态导出Excel。

本文介绍如何在Java中使用EasyExcel库进行数据导出,提供了详细的示例代码,包括表头设置和数据填充,以及一个实际运行的测试Demo。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导入EasyExcel依赖

Gradle

implementation group: 'com.alibaba', name: 'easyexcel', version: '2.2.6'

Maven

<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.6</version>
</dependency>

demo代码,拿来即用

//保存路径与名字
    private final static String fileName = "E:\\" + System.currentTimeMillis() + ".xlsx";
    @Test
//    public static void easyUtil(List<String> heads,String head,List<Map<String, Object>> list){
	  			
    public void easyUtil(){
        List<String> heads = new ArrayList<>();		//表头信息
        heads.add("银行名称");
        heads.add("期间新增项目");
        heads.add("期间新增担保总额");
        heads.add("期间新增解保项目数");
        heads.add("期间新增解保金额");
        heads.add("在保项目数");
        heads.add("在保余额");
        heads.add("银行利率");
        String head="惠农通数据表";			//主表头
        List<Map<String, Object>> list = new ArrayList<>();
        Map<String,Object> test = new LinkedHashMap<>();		//手动添加测试数据(可根据需要从数据库查询)
        test.put("t1", 1);
        test.put("t2", 2);
        test.put("t3", 3);
        test.put("t4", 4);
        test.put("t5", 5);
        test.put("t6", 6);
        test.put("t7", 7);
        test.put("t8", 8);
        list.add(test);
        Map<String,Object> test2 = new LinkedHashMap<>();
        test.put("t1", 1);
        test.put("t2", 2);
        test.put("t3", 3);
        test.put("t4", 4);
        test.put("t5", 5);
        test.put("t6", 6);
        test.put("t7", 7);
        test.put("t8", 8);
        list.add(test2);
        List<Object> objects = new ArrayList<>();
        List<List<String>> hs = new ArrayList<>();
        for (String s : heads) {
            hs.add(Arrays.asList(head,s));
        }
//        List<Map<String, Object>> l = new ArrayList<>();
        Collection<Object> values;
        List<List<Object>> list2 = new ArrayList<>();

        for (int i = 0; i < list.size(); i++) {

            values = list.get(i).values();
            for (Object value : values) {
                objects.add(value.toString());
            }
            list2.add(objects);
        }
        EasyExcel.write(fileName).head(hs).sheet("模板").doWrite(list2);
        System.out.println("导出成功");
    }

工具类方法如下。拿来即用

//保存路径与名字(也可以放进工具类,通过参数传递)
    private final static String fileName = "E:\\" + System.currentTimeMillis() + ".xlsx";
    /**
     * 简易版动态导出
     * @param heads		表头
     * @param head		主表头
     * @param list		表数据
     */
    @Test
    public static void easyUtil(List<String> heads,String head,List<Map<String, Object>> list){
//    public void easyUtil(){

        List<Object> objects = new ArrayList<>();
        List<List<String>> hs = new ArrayList<>();
        for (String s : heads) {
            hs.add(Arrays.asList(head,s));
        }
//        List<Map<String, Object>> l = new ArrayList<>();
        Collection<Object> values;
        List<List<Object>> list2 = new ArrayList<>();

        for (int i = 0; i < list.size(); i++) {

            values = list.get(i).values();
            for (Object value : values) {
                objects.add(value.toString());
            }
            list2.add(objects);
        }
        EasyExcel.write(fileName).head(hs).sheet("模板(sheet名字)").doWrite(list2);
        System.out.println("导出成功");
    }

工具类测试demo

package excel;

import com.alibaba.excel.EasyExcel;

import java.util.*;

/**
 * @author xu
 * @Description
 * @createTime 2021年05月06日 11:45:00
 */
public class test {

    public static void main(String[] args) {
        List<String> heads = new ArrayList<>();		//表头信息
        heads.add("银行名称");
        heads.add("期间新增项目");
        heads.add("期间新增担保总额");
        heads.add("期间新增解保项目数");
        heads.add("期间新增解保金额");
        heads.add("在保项目数");
        heads.add("在保余额");
        heads.add("银行利率");
        String head="惠农通数据表";			//主表头
        List<Map<String, Object>> list = new ArrayList<>();
        Map<String,Object> test = new LinkedHashMap<>();		//手动添加测试数据(可根据需要从数据库查询)
        test.put("t1", 1);
        test.put("t2", 2);
        test.put("t3", 3);
        test.put("t4", 4);
        test.put("t5", 5);
        test.put("t6", 6);
        test.put("t7", 7);
        test.put("t8", 8);
        list.add(test);
        Map<String,Object> test2 = new LinkedHashMap<>();
        test.put("t1", 1);
        test.put("t2", 2);
        test.put("t3", 3);
        test.put("t4", 4);
        test.put("t5", 5);
        test.put("t6", 6);
        test.put("t7", 7);
        test.put("t8", 8);
        list.add(test2);
        easyUtil(heads,head,list);
    }

    private final static String fileName = "E:\\" + System.currentTimeMillis() + ".xlsx";
    public static void easyUtil(List<String> heads,String head,List<Map<String, Object>> list){
//    public void easyUtil(){

        List<Object> objects = new ArrayList<>();
        List<List<String>> hs = new ArrayList<>();
        for (String s : heads) {
            hs.add(Arrays.asList(head,s));
        }
//        List<Map<String, Object>> l = new ArrayList<>();
        Collection<Object> values;
        List<List<Object>> list2 = new ArrayList<>();

        for (int i = 0; i < list.size(); i++) {

            values = list.get(i).values();
            for (Object value : values) {
                objects.add(value.toString());
            }
            list2.add(objects);
        }
        EasyExcel.write(fileName).head(hs).sheet("模板(sheet名字)").doWrite(list2);
        System.out.println("导出成功");
    }
}

效果如图:

在这里插入图片描述

如有问题!欢迎大家评论讨论

EasyExcel是阿里巴巴开源的一款基于JavaExcel操作工具,它简化了读写Excel的工作,使得从数据库导出数据到Excel文件变得相对容易。以下是使用EasyExcel数据库数据导出Excel并供用户下载的基本步骤: 1. **添加依赖**:首先需要在项目中添加EasyExcel的Maven或Gradle依赖。 ```xml <!-- Maven --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>最新版本号</version> </dependency> // 或者 Gradle implementation 'com.alibaba:easyexcel:最新版本号' ``` 2. **创建数据映射**:定义一个实体类,用于对应数据库表的结构,并实现`DataModel`接口,方便数据转换。 ```java public class User implements DataModel<User> { private String name; private int age; // getters and setters... } ``` 3. **配置读取器**:编写一个`RowMapper`,负责将数据库行映射到Excel单元格。 ```java List<User> users = new ArrayList<>(); RowMapper<User> rowMapper = (Map<String, Object> map) -> { User user = new User(); // 解析数据库字段并赋值给User对象 user.setName((String) map.get("name")); user.setAge(Integer.parseInt(map.get("age").toString())); return user; }; ``` 4. **读取数据库并写入Excel**:通过EasyExcel的`doRead`方法,结合`rowMapper`和数据库查询结果生成Excel文件。 ```java import com.alibaba.excel.EasyExcel; import com.alibaba.excel.read.metadata.ReadSheet; import com.alibaba.excel.read.metadata.ReadWorkbook; // ... 其他数据库连接和查询代码 ... doRead(userList, new File("output.xlsx"), readSheet -> { readSheet.setHeadRowData(0); // 如果第一行是表头,则设置为headRowData }); ``` 5. **提供下载**:最后,可以使用HTTP响应或下载链接的方式让用户下载生成的Excel文件。 ```java @GetMapping("/download") public ResponseEntity<byte[]> downloadUsersExcel() throws IOException { byte[] bytes = Files.readAllBytes(new File("output.xlsx").toPath()); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", "users.xlsx"); return ResponseEntity.ok().headers(headers).body(bytes); } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

languageStudents

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值