친애하는 EasyExcel 사용자 여러분:
먼저, EasyExcel에 대한 오랜 신뢰와 지원에 깊은 감사의 말씀을 드립니다. 이 여정 동안 EasyExcel은 많은 개발자와 기업과 함께 성장할 수 있는 행운을 얻었으며 수많은 데이터 처리 작업이 효율적으로 완료되는 것을 목격했습니다.
최근 우리는 더 우수한 데이터 처리 도구와 솔루션이 시장에 등장하여 사용자에게 더 풍부한 선택권을 제공하고 있음을 확인했습니다. 모든 사용자가 최고의 경험과 서비스를 즐길 수 있도록 하기 위해 우리는 중요한 조치를 취하기로 결정했습니다. EasyExcel은 점차 유지 관리 모드로 들어가 사용자에게 평가하고 다른 제품으로 마이그레이션할 수 있는 충분한 시간을 제공합니다. 동시에 우리는 기술 생태계의 건전한 발전을 공동으로 촉진하기 위해 커뮤니티 내외에서 공유되는 유사한 우수한 제품의 사용 및 마이그레이션 경험을 환영하고 기쁘게 생각합니다.
유지 관리 모드에 들어가더라도 EasyExcel의 기본 기능이 안정적으로 실행되고 버그 수정이 이루어지도록 보장하지만 더 이상 새로운 기능을 적극적으로 추가하지는 않습니다. 우리는 모든 사람의 공동 노력을 통해 모든 코드와 모든 프로젝트가 각자의 분야에서 계속해서 빛을 발하고 더 넓은 사용자 그룹에 서비스를 제공할 것이라고 믿습니다. EasyExcel에 대한 귀하의 지원과 이해에 다시 한번 감사드립니다! 우리는 광대한 기술의 세계에서 우리가 다시 새로운 형태로 손을 잡고 빛을 발할 수 있기를 바랍니다.
앞으로의 일과 공부에 최선을 다하길 바랍니다!
감사합니다. Alibaba EasyExcel 팀
Java 구문 분석 및 Excel 생성을 위한 더 유명한 프레임워크로는 Apache poi 및 jxl이 있습니다. 하지만 모두 메모리를 많이 소모한다는 심각한 문제가 있습니다. POI에는 일부 메모리 오버플로 문제를 어느 정도 해결할 수 있는 SAX 모드 API 세트가 있지만 POI에는 여전히 압축 해제 및 저장과 같은 몇 가지 결함이 있습니다. 07 버전의 Excel에서는 메모리에서 수행되며 메모리 소비는 여전히 매우 큽니다.
easyexcel은 Excel 07 버전에 대한 poi의 분석을 다시 작성했습니다. 3M Excel은 POI sax로 구문 분석하는 데 여전히 약 100M의 메모리가 필요합니다. easyexcel을 사용하면 이를 몇 MB로 줄일 수 있으며 Excel의 크기에 관계없이 메모리가 필요하지 않습니다. 메모리 오버플로 버전 03은 POI의 sax 모드를 사용하여 상위 계층에서 모델 변환을 캡슐화하므로 사용자가 더 쉽고 편리하게 사용할 수 있습니다.
물론 더 빠른 속도 모드도 있지만 메모리 사용량은 100M를 조금 넘을 것이다.
< dependency >
< groupId >com.alibaba</ groupId >
< artifactId >easyexcel</ artifactId >
< version >4.0.3</ version >
</ dependency >
오픈소스가 쉽지 않은데요. 아직도 EasyExcel이 작업에 도움이 된다고 생각하시면 오른쪽 상단의 별표를 눌러 도와주세요. 여러분의 지원이 EasyExcel을 더 좋게 만드는 가장 큰 원동력이 됩니다.
issues
다음 2개의 링크에서 문제를 검색해 볼 수 있습니다. 문제가 없으면 issue
만들어 볼 수 있습니다.
issues
를 찾아보세요issues
를 검색하세요. issues
통해 문제를 해결하는 것은 나중에 같은 문제를 겪은 학생들이 복습할 수 있으므로 이 방법을 적극 권장합니다.
github
이나 gitee
에 관계없이 정기적으로 누군가가 귀하의 질문에 답변해 드릴 것입니다. 더 긴급한 경우 issue
제기한 후 DingTalk 그룹 Aite 그룹 리더에게 문의하고 문제 해결을 위해 issue
주소를 보낼 수 있습니다.
QQ
회사에서는 사용을 허락하지 않고 가끔 보기도 하는데, 핵심은 분명 여전히 DingTalk 입니다.
공지 사항을 읽은 후 DingTalk 또는 QQ 그룹에 가입하여 도움을 받으세요.
DingTalk 그룹을 적극 권장하지만 QQ
회사에서는 사용을 허용하지 않습니다. 물론 QQ 그룹에도 문제 해결에 도움을 줄 열성적인 네티즌이 있을 것입니다.
QQ1 그룹(전체): 662022184
QQ2 그룹(전체): 1097936804
QQ3 그룹(전체): 453928496
QQ4 그룹(전체): 496594404
QQ5 그룹(전체): 451925680
QQ6 그룹(전체): 784741035
QQ7 그룹(전체): 667889383
QQ8 그룹: 113968681
DingTalk 1 그룹(전체): 21960511
DingTalk 2 그룹(전체): 32796397
DingTalk 3 그룹(전체): 33797247
DingTalk 4 그룹(전체): 33491624
DingTalk 5 그룹(전체): 32134498
DingTalk 6 그룹(전체): 34707941
DingTalk 7 그룹(전체): 35235427
DingTalk 8 그룹(전체): 44752220
DingTalk 9 그룹(전체): 11045002277
DingTalk 10 그룹(전체): 27360019755
DingTalk 11 그룹(전체): 24330026964
DingTalk 12 그룹(전체): 27210038956
DingTalk 13 그룹: 83695000992
Ji Pengfei (Yuxiao), Zhuang Jiaju
데모 코드 주소: https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java
자세한 문서 주소: https://easyexcel.opensource.alibaba.com/docs/current/quickstart/read
/**
* 最简单的读
* <p>1. 创建excel对应的实体对象 参照{@link DemoData}
* <p>2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoDataListener}
* <p>3. 直接读即可
*/
@ Test
public void simpleRead () {
String fileName = TestFileUtil . getPath () + "demo" + File . separator + "demo.xlsx" ;
// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
EasyExcel . read ( fileName , DemoData . class , new DemoDataListener ()). sheet (). doRead ();
}
데모 코드 주소: https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java
자세한 문서 주소: https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write
/**
* 最简单的写
* <p>1. 创建excel对应的实体对象 参照{@link com.alibaba.easyexcel.test.demo.write.DemoData}
* <p>2. 直接写即可
*/
@ Test
public void simpleWrite () {
String fileName = TestFileUtil . getPath ()+ "write" + System . currentTimeMillis ()+ ".xlsx" ;
// 这里 需要指定写用哪个class去读,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
// 如果这里想使用03 则 传入excelType参数即可
EasyExcel . write ( fileName , DemoData . class ). sheet ( "模板" ). doWrite ( data ());
}
데모 코드 주소: https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/web/WebTest.java
/**
* 文件下载(失败了会返回一个有部分数据的Excel)
* <p>
* 1. 创建excel对应的实体对象 参照{@link DownloadData}
* <p>
* 2. 设置返回的 参数
* <p>
* 3. 直接写,这里注意,finish的时候会自动关闭OutputStream,当然你外面再关闭流问题不大
*/
@ GetMapping ( "download" )
public void download ( HttpServletResponse response ) throws IOException {
// 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
response . setContentType ( "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" );
response . setCharacterEncoding ( "utf-8" );
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder . encode ( "测试" , "UTF-8" ). replaceAll ( " \ +" , "%20" );
response . setHeader ( "Content-disposition" , "attachment;filename*=utf-8''" + fileName + ".xlsx" );
EasyExcel . write ( response . getOutputStream (), DownloadData . class ). sheet ( "模板" ). doWrite ( data ());
}
/**
* 文件上传
* <p>1. 创建excel对应的实体对象 参照{@link UploadData}
* <p>2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link UploadDataListener}
* <p>3. 直接读即可
*/
@ PostMapping ( "upload" )
@ ResponseBody
public String upload ( MultipartFile file ) throws IOException {
EasyExcel . read ( file . getInputStream (), UploadData . class , new UploadDataListener ( uploadDAO )). sheet (). doRead ();
return "success" ;
}