Java 응용 EasyExcel 도구 클래스
Easy Excel 에 대해 서 는 poi 에 대해 진일보 한 패 키 징 을 하여 전체 작성 절 차 를 대상 으로 합 니 다.좋 은 점 은 절차 가 더욱 뚜렷 하고 이해 하기 쉬 우 며 가 독성 이 좋 으 며 나 쁜 점 은 조작 에 있어 서 원생 의 방식 만큼 유연 하지 않다 고 생각 합 니 다.
도입
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();
}
@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 도구 류 에 관 한 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.