办公问答网

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 79|回复: 1

mamba-excel(一个excel/csv操作工具)

[复制链接]

2

主题

9

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2023-1-9 16:09:18 | 显示全部楼层 |阅读模式
1前言

为了简化Excel和Csv的操作复杂性,我自己写了一个工具类可以轻松读和写excel或者csv文件。本文主要介绍如何使用
2 项目源码

地址
3 具体使用教程


  • 核心类:操作本工具主要使用MambaExcelFactory,负责整合操作对象的构建
3.1 读取Excel

可以用来读取指定的List对象,比如有张表记录User的信息,那么可以指定User类型并且通过List接收。例子如图所示
@Test
public void testExcelReader() {
    //指定excel标题头,并且指定每个字段的类型
    List<HeaderData> headerDataList = HeaderDataBuilder.instance()
            .fill("name", STRING)
            .fill("age", INTEGER)
            .fill("address", STRING)
            .fill("salary", DOUBLE)
            .fill("married", BOOLEAN)
            .build();

    MambaExcelFactory.build().readInstance("E:/user.xlsx", User.class, headerDataList)
            .read(new DataReadListener<>((users -> {
                //可以对查询到的结果进行特定逻辑的处理
                System.out.println(JSON.toJSONString(users));
            })));
}上面代码的意思是首先构建excel标题头的信息,指定User中每个字段的类型(注意User类需要预先定义好)。然后构建MambaExcelFactory对象,通过readInstance方法指定excel的路径,刚刚说的你要接收的类型User以及构建好的标题头信息。最后通过DataReadListener监听器来对读取到的List集合做想要的操作。当然,如果你想要读取指定的sheet,可以在readInstance方法中指定特定的sheetName。
3.2 写Excel

写excel的话例子如下: 同样需要先构建excel标题头信息,然后需要通过ContentDataBuilder构建excel的内容信息,具体的内容可以指定具体对象比如User,最后通过writeInstance方法指定生成路径,标题头,内容等信息。
@Test
public void testExcelWriter() {

    List<HeaderData> headerDataList = HeaderDataBuilder.instance()
            .fill("name", STRING)
            .fill("age", INTEGER)
            .fill("address", STRING)
            .fill("salary", DOUBLE)
            .fill("married", BOOLEAN)
            .build();

    List<List<Object>> contentList = ContentDataBuilder.instance(headerDataList)
            .fill(new User("jack", 29, "shanghai", 1111.1, true)).build();

    MambaExcelFactory.build().writeInstance("./user2.xlsx", headerDataList, contentList).write();

}当然,一般我们都是批量写数据,所以本工具肯定也支持指定比如List来批量写User数据
@Test
    public void testExcelWriter2() {

        List<HeaderData> headerDataList = HeaderDataBuilder.instance()
                .fill("name", STRING)
                .fill("age", INTEGER)
                .fill("address", STRING)
                .fill("salary", DOUBLE)
                .fill("married", BOOLEAN)
                .build();

        List<User> users = new ArrayList<>();
        User user1 = new User("jack", 29, "shanghai", 12111d, true);
        User user2 = new User("rose", 24, "beijing", 12000d, true);
        User user3 = new User("jack", 29, "shanghai", 11111.1, true);
        users.add(user1);
        users.add(user2);
        users.add(user3);

        List<List<Object>> contentList = ContentDataBuilder.instance(headerDataList)
                .fill(users).build();

        MambaExcelFactory.build().writeInstance("./user3.xlsx", headerDataList, contentList).write();

    }只需要将fill方法中的参数变为List即可
还有一种情况是并不指定写的内容是什么类型,比如只想导出所有的用户名,那么可以通过如下方式进行:
@Test
public void testExcelWriter3() {
    List<HeaderData> headerDataList = HeaderDataBuilder.instance()
            .fill("name", STRING)
            .build();

    List<Object> users = new ArrayList<>();
    Object name1 = "joe";
    Object name2 = "rose";
    Object name3 = "jack";
    users.add(name1);
    users.add(name2);
    users.add(name3);
    List<List<Object>> contentList = ContentDataBuilder.instance(headerDataList)
            .fill(users,false).build();
    MambaExcelFactory.build().writeInstance("./user4.xlsx", headerDataList, contentList).write();

}3.2 读写CSV

读写csv文件操作和excel一模一样,因此不再赘述,只需将读取生成文件改成csv格式即可
注意:如果在使用过程中需要任何bug或者问题,可以在github提issue给我 地址
回复

使用道具 举报

0

主题

9

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2025-6-12 23:55:06 | 显示全部楼层
1v1飘过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|办公问答网

GMT+8, 2025-7-5 00:10 , Processed in 0.086611 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc. Templated By 【未来科技 www.veikei.com】设计

快速回复 返回顶部 返回列表