EasyExcle的基本使用

1、导入

		<!-- EasyExcel -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>easyexcel</artifactId>
			<version>3.0.5</version>
		</dependency>

2、读取

		//读取文件
		//创建ExcleReaderBuilder实例
		ExcelReaderBuilder readerBuilder = EasyExcel.read();
	    //获取要读取的文件对象
		readerBuilder.file("C:\\Users\\521\\Desktop\\sys_user.xls");
		//指定sheet:不指定,会默认读取全部的sheet
		readerBuilder.sheet("sys_user");
		//自动关闭输入流
		readerBuilder.autoCloseStream(true);
		//设置excle文件格式 .xls
		readerBuilder.excelType(ExcelTypeEnum.XLS);
		//注册一个监听器:将每一行读取的结果,进行解析
		readerBuilder.registerReadListener(new AnalysisEventListener<Object>() {
			@Override
			public void invoke(Object o, AnalysisContext analysisContext) {
				//一行数据读取完成之后的回调
				System.out.println(o);
			}

			@Override
			public void doAfterAllAnalysed(AnalysisContext analysisContext) {
				//通知用户:所有的行已经读取完毕
				System.out.println("数据读取完毕");
			}
		});
		//构建读取器
		ExcelReader reader = readerBuilder.build();
		//读取数据
		reader.readAll();
		//读取完毕
		reader.finish();

可以通过泛型指定数据类型,Map集合。

		//读取文件
		//创建ExcleReaderBuilder实例
		ExcelReaderBuilder readerBuilder = EasyExcel.read();
	    //获取要读取的文件对象
		readerBuilder.file("C:\\Users\\521\\Desktop\\sys_user.xls");
		//指定sheet:不指定,会默认读取全部的sheet
		readerBuilder.sheet("sys_user");
		//自动关闭输入流
		readerBuilder.autoCloseStream(true);
		//设置excle文件格式 .xls
		readerBuilder.excelType(ExcelTypeEnum.XLS);
		//注册一个监听器:将每一行读取的结果,进行解析
		readerBuilder.registerReadListener(new AnalysisEventListener<Map<Integer,String>>() {

			@Override
			public void invoke(Map<Integer, String> integerStringMap, AnalysisContext analysisContext) {
				Set<Integer> keySet = integerStringMap.keySet();
				Iterator<Integer> interator = keySet.iterator();
				while(interator.hasNext()) {
					Integer key = interator.next();
					System.out.print(key +":" +integerStringMap.get(key)+", ");

				}
				System.out.println("");
			}

			@Override
			public void doAfterAllAnalysed(AnalysisContext analysisContext) {
				//通知用户:所有的行已经读取完毕
				System.out.println("数据读取完毕");
			}
		});
		//构建读取器
		ExcelReader reader = readerBuilder.build();
		//读取数据
		reader.readAll();
		//读取完毕
		reader.finish();

实际开发中,对上述代码进行简化

		List<Map<Integer, String>>  list = new LinkedList<>();
		EasyExcel.read("C:\\Users\\521\\Desktop\\sys_user.xls") //获取要读取的文件对象
				.sheet("sys_user") 		//指定sheet:不指定,会默认读取全部的sheet
				.registerReadListener(new AnalysisEventListener<Map<Integer, String>>(){ //注册一个监听器:将每一行读取的结果,进行解析
					@Override
					public void invoke(Map<Integer, String> integerStringMap, AnalysisContext analysisContext) {
						//把每一次读取的一行integerStringMap放入list
						list.add(integerStringMap);
					}

					@Override
					public void doAfterAllAnalysed(AnalysisContext analysisContext) {
						System.out.println("数据读取完毕");
					}
				}).doRead();
		//比例List中的数据
		for(Map<Integer, String> integerStringMap:list){
			Set<Integer> keySet =integerStringMap.keySet();
			Iterator<Integer> interator= keySet.iterator();
			while(interator.hasNext()){
				Integer key =interator.next();
				System.out.print(key+":"+integerStringMap.get(key)+", ");
			}
			//遍历完一个元素:输出一个换行
			System.out.println("");
		}

映射成指定的对象

映射指定的实体类:

  /**
     * 主键
     */
    @ExcelProperty("id") //指定读取excle的列名
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 用户名
     */
    @ExcelProperty("user_name")
    private String userName;

解析excle文件的时候,直接解析实体类:

@ExcelProperty(value = "字符串标题", index = 0)

value :列的标题名称 index:列所在的列数:为0:表示写在第一行

	List<SysUser> list = new ArrayList<>();
		EasyExcel.read("C:\\Users\\521\\Desktop\\sys_user.xls") //获取要读取的文件对象
				.head(SysUser.class)
				.sheet("sys_user") 		//指定sheet:不指定,会默认读取全部的sheet
				.registerReadListener(new AnalysisEventListener<SysUser>(){ //注册一个监听器:将每一行读取的结果,进行解析

					@Override
					public void invoke(SysUser sysUser, AnalysisContext analysisContext) {
						list.add(sysUser);
					}

					@Override
					public void doAfterAllAnalysed(AnalysisContext analysisContext) {
						System.out.println("数据读取完毕");
					}
				}).doRead();
		for(SysUser sysUser : list){
			System.out.println(sysUser);
		}

3、写入

	//简化版:绑定映射的实体类
	//测试easyExcle
	//写入数据
	@Test
	public void testEasyExcle3(){
		List<SysUser> list = new ArrayList<>();
		EasyExcel.read("C:\\Users\\521\\Desktop\\sys_user.xls") //获取要读取的文件对象
				.head(SysUser.class) //每一列的标题
				.sheet("sys_user") 		//指定sheet:不指定,会默认读取全部的sheet
				.registerReadListener(new AnalysisEventListener<SysUser>(){ //注册一个监听器:将每一行读取的结果,进行解析

					@Override
					public void invoke(SysUser sysUser, AnalysisContext analysisContext) {
						list.add(sysUser);
					}

					@Override
					public void doAfterAllAnalysed(AnalysisContext analysisContext) {
						System.out.println("数据读取完毕");
					}
				}).doRead();
		for(SysUser sysUser : list){
			System.out.println(sysUser);
		}


		//list写入excle文件
		EasyExcel.write("C:\\Users\\521\\Desktop\\sys_user_副本.xls")
				.head(SysUser.class)//每一列的标题
				.excelType(ExcelTypeEnum.XLS)
				.sheet("sys_user")
				.doWrite(list);

	}

4、springboot读取数据库生产excle

    @PostMapping("/sysUser/List")
    public ResponseResult<?> findPage(@RequestParam(defaultValue = "1") Integer pageNum,
                              @RequestParam(defaultValue = "10") Integer pageSize,
                              @RequestParam(defaultValue = "") String search) {
        LambdaQueryWrapper<SysUser> wrapper = Wrappers.lambdaQuery();
//        if (StrUtil.isNotBlank(search)) {
//            wrapper.like(Role::getName, search);
//        }
        Page<SysUser> RolePage = sysUserMapper.selectPage(new Page<>(pageNum, pageSize), wrapper);
        System.out.println("************");
        //断点调试捕获 列表
        System.out.println(RolePage.getRecords());
        //list写入excle文件
        EasyExcel.write("C:\\Users\\521\\Desktop\\sys_user_副本1.xls")
                .head(SysUser.class) //每一列的标题
                .excelType(ExcelTypeEnum.XLS)
                .sheet("sys_user")
                .doWrite(RolePage.getRecords());
        System.out.println("************");
        return new ResponseResult(200,"查询用户列表成功",RolePage);
posted @ 2022-02-17 17:11  成强  阅读(854)  评论(0编辑  收藏  举报