easyExcel使用

王小森#發表於2024-06-20

快速開始

讀Excel

DEMO程式碼地址:https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/read/ReadTest.java

    /**
* 最簡單的讀
* <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();
}

寫Excel

DEMO程式碼地址:https://github.com/alibaba/easyexcel/blob/master/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/demo/write/WriteTest.java

    /**
* 最簡單的寫
* <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());
}

web上傳、下載

DEMO程式碼地址: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";
}

相關文章