当前位置:   article > 正文

SpringBoot + Vue + EasyExcel 实现Excel下载导出功能_vue + easyexcel excel下载

vue + easyexcel excel下载

在实现的过程中遇到过以下问题:

 换成.xls后,又变成这样!

最终,问题终于得到了解决

上代码!

前端($http是二次封装的axios,不用在意,直接axios也可!)

  1. doDownload() {
  2. this.$http({
  3. url: this.$url.downloadTemplate,
  4. method: 'get',
  5. responseType: 'blob' // blob 或 arraybuffer
  6. }).then(res => {
  7. if(res) {
  8. this.downloadFile(res?.data, '用户模板.xlsx');
  9. }
  10. }).catch(e => {
  11. console.log(e);
  12. })
  13. },
  14. // 下载文件
  15. downloadFile(res, fileName) {
  16. let blob = new Blob([res]); //res为从后台返回的数据
  17. if (!fileName) {
  18. fileName = res.headers['content-disposition'].split('filename=').pop();
  19. }
  20. if ('msSaveOrOpenBlob' in navigator) {
  21. window.navigator.msSaveOrOpenBlob(blob, fileName);
  22. } else {
  23. const elink = document.createElement('a');
  24. elink.download = fileName;
  25. elink.style.display = 'none';
  26. elink.href = URL.createObjectURL(blob);
  27. document.body.appendChild(elink);
  28. elink.click();
  29. URL.revokeObjectURL(elink.href);
  30. document.body.removeChild(elink);
  31. }
  32. }

后端

DO实体类(要与数据库字段对应)

  1. @Data
  2. @ExcelIgnoreUnannotated
  3. public class UserDO {
  4. @ColumnWidth(20)
  5. @ExcelIgnore
  6. private String uuid;
  7. @ExcelProperty(value = {"用户名"}, index = 0)
  8. @ColumnWidth(20)
  9. private String account;
  10. @ExcelProperty(value = {"密码"}, index = 1)
  11. @ColumnWidth(20)
  12. private String pwd;
  13. @ExcelProperty(value = {"角色"}, index = 2)
  14. @ColumnWidth(20)
  15. private String identity;
  16. @ColumnWidth(20)
  17. @ExcelIgnore
  18. private String toDel;
  19. }

Controller

  1. @GetMapping("/download")
  2. public void downloadExcl(HttpServletResponse response) {
  3. userService.downloadExcl(response);
  4. }

ServiceImpl,(这里.doWrite()是写入对应列的数据,不是标题名)

  1. @Override
  2. public void downloadExcl(HttpServletResponse response) {
  3. try {
  4. response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
  5. response.setCharacterEncoding("utf-8");
  6. String fileName = URLEncoder.encode("用户列表", "UTF-8");
  7. response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
  8. EasyExcel.write(response.getOutputStream()).head(UserDO.class).excelType(ExcelTypeEnum.XLSX).sheet("用户列表").doWrite(new ArrayList<>());
  9. } catch (Exception e) {
  10. }
  11. }

pom.xml(选择版本的问题,要参考官网)

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>easyexcel</artifactId>
  4. <version>3.1.3</version>
  5. </dependency>

:版本爆红问题,参考IDEA中pom.xml配置文件依赖文件版本号报红的最有效解决办法_pom.xml文件报红_Butterfly_ren的博客-CSDN博客

如果还是爆红,先不要像一些教程说的,调配置setting等...,先重启idea这种的操作看看。

(这里复制粘贴,可能version爆红,在那里就好使,我也不知道为什么,有大佬知道麻烦评论区解释一下)

最终结果图

然后说说上面遇到的问题,

这里之有.xlsx是没问题的,但换成.xls,虽然能够正常显示,但会报不匹配问题。

这里参考的:Java使用EasyExcel下载xls、xlsx 出现文件格式与扩展名不匹配_文件格式和扩展名不匹配 easyexcel导出_小 肥羊的博客-CSDN博客

至于.xls的问题,本人还没有解决,如果哪位大佬有解决方法,希望能够分享一下!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/536852
推荐阅读
相关标签
  

闽ICP备14008679号