【JAVA下载excel工具类】
SpringBoot 整合java下载excel
前几天逛吧的时候发现了一个很好的下载功能,代码非常的少,推荐使用。 下面我们就来看看吧
-
导入maven仓库
<dependency> <groupId>com.github.liaochong</groupId> <artifactId>myexcel</artifactId> <version>3.3.0.GA</version> </dependency>
-
创建excel下载工具类
package com.hjy.mall.common.util; import com.github.liaochong.myexcel.core.DefaultStreamExcelBuilder; import com.github.liaochong.myexcel.utils.AttachmentExportUtil; import com.hjy.mall.common.api.ResultCode; import com.hjy.mall.common.exception.ApiException; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executors; public class StreamExport { /**导出表格最大容量*/ public static final Integer EXCEL_MAX_CAPACITY = 60_000; public static void flowPattern(HttpServletResponse response, Class clazz, List list, String fileName) { //long start = System.currentTimeMillis(); try (DefaultStreamExcelBuilder streamExcelBuilder = DefaultStreamExcelBuilder .of(clazz) .threadPool(Executors.newFixedThreadPool(10)) .capacity(EXCEL_MAX_CAPACITY) .start()) { // 多线程异步获取数据并追加至excel,join等待线程执行完成 List<CompletableFuture> futures = new ArrayList<>(); CompletableFuture future = CompletableFuture.runAsync(() -> { List dataList = list; // 数据追加 streamExcelBuilder.append(dataList); }); futures.add(future); futures.forEach(CompletableFuture::join); // 最终构建 Path zip = streamExcelBuilder.buildAsZip(fileName); AttachmentExportUtil.export(zip,fileName+".zip",response); } catch (IOException e) { // e.printStackTrace(); throw new ApiException(ResultCode.FAILED); } } }
-
编写接口示范
@RequestMapping(value = "/excel", method = RequestMethod.GET) @PreAuthorize("hasAnyAuthority(/finance/financeExcel)") public void financeExcel(){ //用户列表 List<UserDto> userList= UserService.getUserInfo(); //调用工具类 StreamExport.flowPattern(((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) .getResponse(), UserDto.class,userList , "用户列表"+ DateFormatter.HHmmssSSS()); }
到这里就结束了,简单,方便。
下一篇:
FeignClient带文件多对象传参