java代码把数据库表信息导出成exccel文件(EasyExcel)

简介

工作中要实现导出excel的功能, 可以使用阿里巴巴的EasyExcel这个工具,操作简单,容易上手

1、导入Maven依赖

        <!--easyExcel测试导出功能开始-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.2.6</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>
        <!--结束-->

没错,就这三个就行了
然后开始写测试代码测试功能,自己建立Bean对象,就不查数据库了,模拟查出数据的流程

2.建立bean实体类类,干脆简单一点,就两个属性

/**
 * @author zengFanLiang
 * @version 1.1
 */
@SuppressWarnings("all")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AdminTest {
    @ExcelProperty(value = "名字" ,index= 0)
    private String name;
    @ExcelProperty(value = "年龄" ,index= 1)
    private int age;
}

3.开始测试功能,没有写test类,于是直接psvm了

    public static void main(String[] args) {
        //创建对象模拟查出数据并赋值
        ArrayList<AdminTest> adminlist = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            AdminTest admin = new AdminTest("亮哥yyds" + i, 20);
            adminlist.add(admin);
        }
        //构建写Excel对象
        Consumer<ExcelWriter> consumer = writer -> {
            writer.write(adminlist, EasyExcel.writerSheet("管理员信息")
                    .head(AdminTest.class)
                    .build());
        };
        //调用方法去导出数据
        export("D:/报表.xlsx", consumer);


    }
    //被调用的导出方法
    public static void export(String fileName, Consumer<ExcelWriter> writerConsumer) {
        ExcelWriter writer = EasyExcel.write(fileName)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
                .build();
        writerConsumer.accept(writer);
        writer.finish();
    }

效果演示

在这里插入图片描述

那么怎么去读取数据呢,看这

        //读数据

        // 创建一个输入流,将 Excel 文件读取出来
        try {
            InputStream inputStream = new FileInputStream("D:/报表.xlsx");
            //一行一行读是真的慢
            List<AdminTest> tmpList = EasyExcel.read(inputStream)
                    // 设置与Excel表映射的类
                    .head(AdminTest.class)
                    // 设置sheet,默认读取第一个
                    .sheet()
                    // 设置标题所在行数
                    .headRowNumber(1)
                    //异步 读取
                    .doReadSync();
            for (AdminTest adminTest : tmpList) {
                System.out.println(adminTest);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

执行结果如下

在这里插入图片描述
但是这种一行一行读取太慢了,可以创建监听器,然后读取一批,再执行,这个可以看官方API

希望对大家有所帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值