基于 poi 的 Excel 操作组件 Excel4J

Apache-2.0
Java 查看源码»
跨平台
2017-06-16
局长

Excel4J 是基于 poi 的 excel 操作组件,大大减少代码量,提高开发效率。

基于注解

@ExcelField(title = "学号", order = 1)
private Long id;
@ExcelField(title = "姓名", order = 2)
private String name;
@ExcelField(title = "入学日期", order = 3)
private Date date;
@ExcelField(title = "班级", order = 4)
private Integer classes;
@ExcelField(title = "是否开除", order = 5)
private String expel;

读取Excel快速实现

待读取Excel(截图)

待读取Excel截图

转换函数(/src/test/java/base/Excel2Module.java#excel2Object2)

   @Test
   public void excel2Object2() throws Exception {

       String path = "D:\\IdeaSpace\\Excel4J\\src\\test\\resource\\students_02.xlsx";

       // 不基于注解,将Excel内容读至List>对象内
       List> lists = ExcelUtils.getInstance().readExcel2List(path, 1, 3, 0);
       System.out.println("读取Excel至String数组:");
       for (List list : lists) {
           System.out.println(list);
       }
       // 基于注解,将Excel内容读至List对象内
       List students = ExcelUtils.getInstance().readExcel2Objects(path, Student2.class, 0);
       System.out.println("读取Excel至对象数组(支持类型转换):");
       for (Student2 st : students) {
           System.out.println(st);
       }
   }

转换结果

读取Excel至String数组:
[1.0000000000001E13, 张三, 2016/01/19, 101.0, 是]
[1.0000000000002E13, 李四, 2017-11-17 10:19:10, 201.0, 否]
[1.0000000000004E13, 王二, 2017/11/17, 301.0, 否]
读取Excel至对象数组(支持类型转换):
Student2{id=10000000000001, name='张三', date=Tue Jan 19 00:00:00 CST 2016, classes=101, expel='是'}
Student2{id=10000000000002, name='李四', date=Fri Nov 17 10:19:10 CST 2017, classes=201, expel='否'}
Student2{id=10000000000004, name='王二', date=Fri Nov 17 00:00:00 CST 2017, classes=301, expel='否'}

导出Excel

不基于模板快速导出

导出函数(/src/test/java/base/Module2Excel.java#testList2Excel)

    @Test
    public void testList2Excel() throws Exception {

        List> list2 = new ArrayList<>();
        List header = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            List _list = new ArrayList<>();
            for (int j = 0; j < 10; j++) {
                _list.add(i + " -- " + j);
            }
            list2.add(_list);
            header.add(i + "---");
        }
        ExcelUtils.getInstance().exportObjects2Excel(list2, header, "D:/D.xlsx");
    }

导出效果(截图)

无模板导出截图

基于模板List导出

导出函数(/src/test/java/base/Module2Excel.java#testObject2Excel)

    @Test
    public void testObject2Excel() throws Exception {

        String tempPath = "D:\\IdeaSpace\\Excel4J\\src\\test\\resource\\normal_template.xlsx";
        List list = new ArrayList<>();
        list.add(new Student1("1010001", "盖伦", "六年级三班"));
        list.add(new Student1("1010002", "古尔丹", "一年级三班"));
        list.add(new Student1("1010003", "蒙多(被开除了)", "六年级一班"));
        list.add(new Student1("1010004", "萝卜特", "三年级二班"));
        list.add(new Student1("1010005", "奥拉基", "三年级二班"));
        list.add(new Student1("1010006", "得嘞", "四年级二班"));
        list.add(new Student1("1010007", "瓜娃子", "五年级一班"));
        list.add(new Student1("1010008", "战三", "二年级一班"));
        list.add(new Student1("1010009", "李四", "一年级一班"));
        Map data = new HashMap<>();
        data.put("title", "战争学院花名册");
        data.put("info", "学校统一花名册");
        // 基于模板导出Excel
        ExcelUtils.getInstance().exportObjects2Excel(tempPath, 0, list, data, Student1.class, false, "D:/A.xlsx");
        // 不基于模板导出Excel
        ExcelUtils.getInstance().exportObjects2Excel(list, Student1.class, true, null, true, "D:/B.xlsx");

    }

导出模板(截图)

导出模板截图

基于模板导出结果(截图)

基于模板导出结果图

不基于模板导出结果(截图)

不基于模板导出结果图

基于模板Map>导出

导出函数(/src/test/java/base/Module2Excel.java#testMap2Excel)

    @Test
    public void testMap2Excel() throws Exception {

        Map classes = new HashMap<>();

        Map data = new HashMap<>();
        data.put("title", "战争学院花名册");
        data.put("info", "学校统一花名册");

        classes.put("class_one", new ArrayList() {{
            add(new Student1("1010009", "李四", "一年级一班"));
            add(new Student1("1010002", "古尔丹", "一年级三班"));
        }});
        classes.put("class_two", new ArrayList() {{
            add(new Student1("1010008", "战三", "二年级一班"));
        }});
        classes.put("class_three", new ArrayList() {{
            add(new Student1("1010004", "萝卜特", "三年级二班"));
            add(new Student1("1010005", "奥拉基", "三年级二班"));
        }});
        classes.put("class_four", new ArrayList() {{
            add(new Student1("1010006", "得嘞", "四年级二班"));
        }});
        classes.put("class_six", new ArrayList() {{
            add(new Student1("1010001", "盖伦", "六年级三班"));
            add(new Student1("1010003", "蒙多", "六年级一班"));
        }});

        ExcelUtils.getInstance().exportObject2Excel("D:\\IdeaSpace\\Excel4J\\src\\test\\resource\\map_template.xlsx",
                0, classes, data, Student1.class, false, "D:/C.xlsx");
    }

导出模板(截图)

导出模板截图

导出结果(截图)

导出结果图

的码云指数为
超过 的项目
加载中

评论(10)

Supwb
Supwb
单元格是函数表达式的时候,如果返回String,最后会调用CellValue.formatAsString(),返回的String会有多余的双引号“”,这种是否是正常的??
风吹过的绿洲
风吹过的绿洲
单元格合并怎么处理的呢?
zyy258963
zyy258963
按照模板导出excel时,原有的模板样式不能够保存,导出后,有数据的行 高度为0 。
周周为为
周周为为
java.lang.NoClassDefFoundError: Could not initialize class com.github.crab2died.utils.Utils$1?怎么解决
小立木
小立木
主要看性能怎么样了
Crab2Died
Crab2Died 软件作者
不友好协议一边去
不友好协议一边去
为什么国产的软件,许可证都是这么扭捏,建议 开源中国,许可证不清楚的,别上了
杰森.金
杰森.金
弄来试试,看看性能怎么样
xmlspyspring
xmlspyspring
简单表哥还行,复杂的老实用poi吧. 比如不定数量列就没法处理
Joy1024
Joy1024
不错啊

Excel4J 3.0.0-Alpha 版本更新

Exce4J 3.0.0-Alpha 更新 新增CSV(包含基于ExcelField注解)的导出支持 新增CSV(包含基于ExcelField注解)的导入支持 完全兼容基于ExcelField注解的所有特性...

2018/12/03 11:35

Excel4J v2.1.0版本更新,Java 快速操作 Excel 工具

java基于poi实现快速操作Excel的工具[v2.1.0]版本更新: v2.x新特性 Excel读取支持部分类型转换了(如转为Integer,Long,Date(部分)等) v2.0.0之前只能全部内容转为String Excel支持非注解读取E...

2017/10/28 10:56

Excel4J v2.0.0,Java 快速操作 Excel 工具

Excel4J v2.0.0 发布了,更新如下: v2.0.0新特性 Excel读取支持部分类型转换了(如转为Integer,Long,Date(部分)等) v2.0.0之前只能全部内容转为String Excel支持非注解读取Excel内容了,内容存...

2017/06/16 18:47

没有更多内容

加载失败,请刷新页面

没有更多内容

暂无问答

java基于poi实现快速操作Excel的工具[v2.1.0]版本更新

java快速操作Excel工具,快速实现绚丽导出Excel

2017/10/28 10:48
516
2
Excel大批量数据多sheet导出

感谢Crab2Died,Excel4J挺好用 https://gitee.com/Crab2Died/Excel4J 六. 多sheet数据导出 1. 多sheet数据导出包装类,详见com.github.sheet.wrapper包内包装类 多sheet数据导出只需将待导出数...

2018/06/11 11:26
25
0

没有更多内容

加载失败,请刷新页面

没有更多内容

返回顶部
顶部