Java 응용 EasyExcel 도구 클래스

머리말
Easy Excel 에 대해 서 는 poi 에 대해 진일보 한 패 키 징 을 하여 전체 작성 절 차 를 대상 으로 합 니 다.좋 은 점 은 절차 가 더욱 뚜렷 하고 이해 하기 쉬 우 며 가 독성 이 좋 으 며 나 쁜 점 은 조작 에 있어 서 원생 의 방식 만큼 유연 하지 않다 고 생각 합 니 다.
도입
  • StudentVo 는 실체 유형 으로 실체 중의 각 속성 은 엑셀 과 순서대로 대응 해 야 하 며 모두 String 유형 으로 진정 으로 삽입 할 때 만 전환 하 는 것 을 권장 합 니 다
  • ImportExcelListener 류 는 데 이 터 를 진정 으로 처리 하 는 클래스 입 니 다
  • CommonService 는 Spring 의 service bean 일 뿐 curd 작업 을 수행 합 니 다
    
     private CommonService commonService;
        public void importExcel(MultipartFile file) throws IOException {
        // HEAD_ROW_NUMBER Excel      ,      ImportExcelListener      HEAD_ROW_NUMBER               
            EasyExcel.read(file.getInputStream(), StudentVo.class, new ImportExcelListener<StudentVo>(HEAD_ROW_NUMBER, commonService)).sheet().headRowNumber(HEAD_ROW_NUMBER).doRead();
        }
    
    ImportExcelListener 류 는 다음 과 같 습 니 다.여 기 는 실제 수요 에 따라 범 형 을 사용 하지 않 아 도 됩 니 다.
    
    public class ImportExcelListener<T> extends AnalysisEventListener<T> {
            /**
             *   BATCH_COUNT           list ,      
             */
            private static final int BATCH_COUNT = 500;
            private int headRowNum;
            private CommonService commonService;
            private List<T> list = new ArrayList<>();
    
            public ImportExcelListener(int headRowNumber, CommonService commonService) {
                this.headRowNum = headRowNumber;
                this.commonService = commonService;
            }
    
            /**
             *               
             */
            @Override
            public void invoke(T data, AnalysisContext context) {
                //       data      ,          
                Integer rowNum = context.readRowHolder().getRowIndex();
               log.info("         {} ", rowNum);
              
                list.add(data);
                //     ,          ,     
                if (list.size() >= BATCH_COUNT) {
                    //   
                    commonService.save(list);
                    list.clear();
                }
            }
    
    
            //      ,            ,         
            @Override
            public void doAfterAllAnalysed(AnalysisContext context) {
                if (CollectionUtils.isEmpty(list)) {
                    return;
                }
                commonService.save(list);
                list.clear();
            }
        }
    
    가 져 온 데이터 에 대해 특별한 요구 가 없고 데이터 양도 많 지 않 으 면 다음 과 같은 방식 을 직접 사용 할 수 있다.
    
    List<Object> data = null;
            try {
                data = EasyExcelFactory.read(file.getInputStream()).sheet().doReadSync();
            } catch (IOException e) {
                log.error("    ", e);
                throw new BusinessException("    ");
            }
            //     
            // ...
    
    도 출
  • 실체 대상 을 매 핑 할 필요 가 없고 실제 운용 에서 데 이 터 를 찾 아 낸 후에 스스로 리스트로 조립 해 야 한다.의 2 차원 유형 은 몇 번 째 줄 의 몇 번 째 열 을 나타 낸다
  • 
    public void test() throws FileNotFoundException {
            File file = new File("E:\\work-grandview\\  .xlsx");
            //   writerBuilder  ,      
            ExcelWriter excelWriter = EasyExcel.write(new FileOutputStream(file))
                    .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
                    .autoCloseStream(Boolean.TRUE)
                    .build();
    
            //  List<List<?>>  ,     ,         ,       
            List<List<String>> titleList = new ArrayList<>();
            titleList.add(Arrays.asList("  ", "key", "value"));
            int sheetNum = 0;
            WriteSheet writeSheet = EasyExcel.writerSheet(sheetNum,"    ").build();
            excelWriter.write(titleList, writeSheet);
    
            //       ;
            List<List<Object>> content = new ArrayList<>();
            // 10 3 
            for (int i = 0; i < 10; i++) {
                List<Object> dataList = new ArrayList<>();
                for (int j = 0; j < 3; j++) {
                    dataList.add(j);
                }
                content.add(dataList);
            }
    
    
            //     
            excelWriter.write(content, writeSheet);
            //      
            excelWriter.finish();
        }
    
    在这里插入图片描述
  • Easy Excel 에서 제공 하 는 주 해 를 통 해 실 체 를 대응 하 는 열 에 투사 합 니 다
  • 
    @Data
     public class VO {
            @ExcelProperty(value = "  ", index = 0)
            int name;
            @ExcelProperty(value = "key", index = 1)
            int key;
            @ExcelProperty(value = "value", index = 2)
            int value;
        }
    
    @Test
        public void test() throws FileNotFoundException {
            File file = new File("E:\\work-grandview\\  .xlsx");
            //   writerBuilder  ,      
            ExcelWriter excelWriter = EasyExcel.write(new FileOutputStream(file))
                    .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
                    .autoCloseStream(Boolean.TRUE)
                    .build();
    
            //       ;
            List<VO> content = new ArrayList<>();
            // 10 3 
            for (int i = 0; i < 10; i++) {
                VO vo = new VO();
                vo.setKey(i);
                vo.setName(i);
                vo.setValue(i);
               content.add(vo);
            }
    		//   sheet,   0  ,             ,       ,    n    i sheet 
            WriteSheet writeSheet = EasyExcel.writerSheet(0,"    ").build();
            //     
            writeSheet.setClazz(content.get(0).getClass());
            //     
            excelWriter.write(content, writeSheet);
            excelWriter.finish();
    
        }
    
    처음에 만 든 후에 이상 하 게 this 0 열 이 많아 졌 습 니 다.나중에 생각해 보 니 제 실체 류 는 T e s t 류 의 내부 류 였 고'c o n t e n t.g e t(0).g e t C l a s()'는 대리 류 T e s t 0 열 을 받 았 습 니 다.표 머리 를 설정 할 때 속성 값 으로 처리 되 었 습 니 다.VO 클래스 를 외부 에 기록 한 후 해결 합 니 다.
    在这里插入图片描述
    在这里插入图片描述
    자바 애플 리 케 이 션 Easy Excel 도구 류 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.자바 Easy Excel 도구 류 에 관 한 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기