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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM