ExcelWriter excelWriter = EasyExcelFactory.write(out).build();int totalPage = searchUserTotalPage(searchModel);if(totalPage > 0) {Page<User> page = Page.create(searchModel);int sheet = (totalPage % maxSheetCount == 0) ? totalPage / maxSheetCount: (totalPage / maxSheetCount) + 1;for(int i=0;i<sheet;i++) {WriterSheet writeSheet = buildSheet(i,"sheet"+i);int startPageNo = i*(maxSheetCount/pageSize)+1;int endPageNo = (i+1)*(maxSheetCount/pageSize);while(page.getPageNo()>=startPageNo && page.getPageNo()<=endPageNo) {page = searchUser(searchModel);if(CollectionUtils.isEmpty(page.getList())) {break;}excelWriter.write(page.getList(),writeSheet);page.setPageNo(page.getPageNo()+1);}}}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
这样就能实现分页查询,将数据导出到不同的excel的sheet当中 。
6、文件上传到OSS由于现在我们导出excel数据的方案改成了异步,所以没法直接将excel文件,同步返回给用户 。
因此我们需要先将excel文件存放到一个地方,当用户有需要时,可以访问到 。
这时,我们可以直接将文件上传到OSS文件服务器上 。
通过OSS提供的上传接口,将excel上传成功后,会返回文件名称?和访问路径 。
我们可以将excel名称和访问路径保存到表?中,这样的话,后面就可以直接通过浏览器?,访问远程excel文件了 。
而如果将excel文件保存到应用服务器?,可能会占用比较多的磁盘空间 。
一般建议将应用服务器和文件服务器?分开,应用服务器需要更多的内存资源?或者CPU资源?,而文件服务器?需要更多的磁盘资源 。
7、通过WebSocket推送通知通过上面的功能已经导出了excel文件,并且上传到了OSS文件服务器上 。
接下来的任务是要本次excel导出结果,成功还是失败,通知目标用户 。
有种做法是在页面上提示:正在导出excel数据,请耐心等待 。
然后用户可以主动刷新当前页面,获取本地导出excel的结果 。
但这种用户交互功能,不太友好 。
还有一种方式是通过webSocket建立长连接,进行实时通知推送 。
如果你使用了SpringBoot框架,可以直接引入webSocket的相关jar包:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>- 1.
- 2.
- 3.
- 4.
使用起来挺方便的 。
我们可以加一张专门的通知表,记录通过webSocket推送的通知的标题、用户、附件地址、阅读状态、类型等信息 。
能更好的追溯通知记录 。
webSocket给客户端推送一个通知之后,用户的右上角的收件箱上,实时出现了一个小窗口,提示本次导出excel功能是成功还是失败,并且有文件下载链接 。
当前通知的阅读状态是未读 。
用户点击该窗口,可以看到通知的详细内容,然后通知状态变成已读 。
8、总条数可配置我们在做导百万级数据这个需求时,是给用户用的,也有可能是给运营同学用的 。
其实我们应该站在实际用户的角度出发,去思考一下,这个需求是否合理 。
用户拿到这个百万级别的excel文件,到底有什么用途,在他们的电脑上能否打开该excel文件,电脑是否会出现太大的卡顿了,导致文件使用不了 。
如果该功能上线之后,真的发生发生这些情况,那么导出excel也没有啥意义了 。
因此,非常有必要把记录的总条数?,做成可配置的,可以根据用户的实际情况调整这个配置 。
比如:用户发现excel中有50万的数据,可以正常访问和操作excel,这时候我们可以将总条数调整成500000,把多余的数据截取掉 。
其实,在用户的操作界面,增加更多的查询条件,用户通过修改查询条件,多次导数据,可以实现将所有数据都导出的功能,这样可能更合理一些 。
此外,分页查询时,每页的大小,也建议做成可配置的 。
通过总条数和每页大小,可以动态调整记录数量和分页查询次数,有助于更好满足用户的需求 。
9、order by商品编号之前的需求是要将相同商品编号的数据放到一起 。
例如:
推荐阅读
- u盘损坏后如何恢复数据,教你一招数据立马恢复
- 回收站清空数据恢复软件有哪些,恢复清空回收站的文件方法
- 雷霆之翼小游戏~~传奇盛世翅膀升阶数据 翅膀4升5需要多少羽毛
- 未保存的excel如何恢复,很简单只需两个步骤轻松搞定
- excel没保存怎么找回,excel恢复保存前数据方法
- 怎么制作链接,Excel制作超链接的简单方法
- u盘损坏后如何恢复数据,优盘损坏数据恢复方法
- 美团数据分析中国的年轻人百分之90不会做饭
- excel中xls和xlsx区别~电脑xls和excel有什么区别
- 迪丽热巴|2023好剧来袭,部部预约破百万,哪部能成爆款?
