easypoi

easypoi

网址:EasyPoi教程_V1.0 (mydoc.io)

easypoi是为了方便我们编写excel和word的模板导入和导出,是对poi的封装的一个工具类

(将Java中的对象作为excel表中一行一行记录导出)

​ easypoi 父包--作用大家都懂得

​ easypoi-annotation 基础注解包,作用与实体对象上,拆分后方便maven多工程的依赖管理

​ easypoi-base 导入导出的工具包,可以完成Excel导出,导入,Word的导出,Excel的导出功能

​ easypoi-web 耦合了spring-mvc 基于AbstractView,极大的简化spring-mvc下的导出功能

​ sax 导入使用xercesImpl这个包(这个包可能造成奇怪的问题哈),word导出使用poi-scratchpad,都作为可选包了

导出

1.导入pom依赖

 <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
        </dependency>

        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>4.3.0</version>
        </dependency>

        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>4.3.0</version>
        </dependency>

        <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>4.3.0</version>
        </dependency>
        
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>

注解介绍
easypoi起因就是Excel的导入导出,最初的模板是实体和Excel的对应,model--row,filed--col 这样利用注解我们可以和容易做到excel到导入导出 经过一段时间发展,现在注解有5个类分别是

@Excel 作用到filed上面,是对Excel一列的一个描述

- 用在filed(属性)上面,是对Excel一列的一个描述
- 常用属性: 
    name         :   [String][生成Excel表格中列名]
    needMerge:       [boolean][是否需要纵向合并单元格(用于含有list中,单个的单元格,合并list创建的多个row)]
    orderNum :       [String][指定生成Excel中列的顺序,按照数字自然顺序排序]
    savePath :       [String][指定导入Excel中图片的保存路径]
    type         :   [String][导出类型 1 是文本 2 是图片,3 是函数,10 是数字 默认是文本]
    width    :       [Double][指定导出Excel时列的宽度]
    isImportField:   [boolean][是否是导入字段,如果没有说明是错误的Excel]
    exportFormat:    [String][导出Excel的时间格式]
    importFormat:    [String][导入Excel的时间格式]
    format   :       [String][相当于同时设置了exportFormat和importFormat]
    imageType:       [int][导出类型 1 从file读取 2 是从数据库中读取 默认是文件 同样导入也是一样的]
    suffix   :       [String][文字后缀,如% 90 变成90%]

@ExcelCollection 表示一个集合,主要针对一对多的导出,比如一个老师对应多个科目,科目就可以用集合表示

- 一对多的集合注解,用以标记集合是否被数据以及集合的整体排序
- 常用属性:
    name        :       [String][定义集合列名]
    orderNum:           [int][用来指定导出excel集合内列的顺序]
    type        :     [Class\<?>][用来指定导出是创建对象类型]

@ExcelEntity 表示一个继续深入导出的实体,但他没有太多的实际意义,只是告诉系统这个对象里面同样有导出的字段

- 标记是不是导出excel 标记为实体类,一遍是一个内部属性类,标记是否继续穿透
- 常用属性:
    name: [String][定义唯一标识]

@ExcelIgnore 和名字一样表示这个字段被忽略跳过这个导导出

# 1.说明
- 用在属性上,导出Excel时忽略这个属性

@ExcelTarget 这个是作用于最外层的对象,描述这个对象的id,以便支持一个对象可以针对不同导出做出不同处理

- 用在实体类上标识是一个可以通过EasyPOI导入导出的实体类
- 相关属性:
    value:          [String][定义id唯一标识,不能重复]    `常用`
    height:         [Double][定义单元格高度]
    fontSize:       [short ][定义单元格字体大小]

User.java

@Data
@AllArgsConstructor
@NoArgsConstructor
@ExcelTarget("user1")//这个是标识这个对象,里面的值没有影响
public class User implements Serializable {
    @Excel(name = "编号")
    private String id;
    @Excel(name = "姓名",width = 10)
    private String name;
    @Excel(name = "年龄",replace = {"10岁_10","11岁_11"})
    private Integer age;
    @Excel(name = "生日",exportFormat = "yyyy-MM-dd",width = 16)
    private Date bir;

}

Testpoi.java

public class Testpoi {
    
    public List<User> getUsers(){
        List<User> users = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setId(String.valueOf(i));
            user.setName("小余"+i);
            user.setAge(5+i);
            user.setBir(new Date());
            users.add(user);
        }
        return users;
    }

    @Test
    public void testExport() throws IOException {

        //获取数据
        List<User> users = getUsers();
        //导出excel
        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用户信息列表", "用户信息"), User.class, users);
        //将excel写入指定位置
        FileOutputStream outputStream = new FileOutputStream("C:/Users/MSI-PC/Desktop/aa.xls");
        workbook.write(outputStream);
        outputStream.close();
        workbook.close();
    }
}

这个代码中都只是展示了一部分属性的用法,在学习中我们可以去举一反三来提高学习效率。

导入

public void testImport() throws Exception {
    ImportParams params = new ImportParams();
    params.setTitleRows(1);//标题占的行数
    params.setHeadRows(1);//header占的行数
    List<Object> excel = ExcelImportUtil.importExcel(new FileInputStream("C:/Users/MSI-PC/Desktop/aa.xls"), User.class, params);
    excel.forEach(System.out::println);
}
上一篇:微信公共帐号开发(一)


下一篇:Codeforces225 C.Barcode(dp)