Hutool工具类实现的简易excel文件导出方法

这篇具有很好参考价值的文章主要介绍了Hutool工具类实现的简易excel文件导出方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

工作中遇到的小坑,记录一下


Hutool的官方文档有给出详细的excel文件导出工具类(ExcelWriter),然而实际使用中,有些地方容易踩坑,记录一下方便对照。

首先是SpringBoot的后端,我用的是写出到客户端下载的方式,输入需要的年份year和月份month,HttpServletResponse也是必须的。

@ApiOperation("表格导出接口")
@GetMapping ("/export")
public void export(@RequestParam String month, @RequestParam String year, HttpServletResponse response) throws IOException {
        // 用个List<Map>装表格的所有内容
        ArrayList<Map<String, Object>> rows = new ArrayList<>();
        // 拿取表格里需要的数据
        List<ExportVO> result = conferenceService.getExportVO(month, year);
        // 拼接上列明。我这里用的最土的方法,很不优雅别学我
        for(int i = 0; i < result.size(); i++){
            Map<String, Object> row = new LinkedHashMap<>();
            row.put("会议类型", result.get(i).getConferenceType());
            row.put("会议日期", result.get(i).getUsingDate());
            row.put("会议名称", result.get(i).getConfereceName());
            row.put("主办部门", result.get(i).getMainDept());
            row.put("责任人", result.get(i).getContacts());
            row.put("参会人员范围", result.get(i).getScope());
            row.put("备注", result.get(i).getOtherNeeds());
            rows.add(row);
        }
        // 通过工具类创建writer
        ExcelWriter writer = ExcelUtil.getWriter(true);        
        // 合并单元格后的标题行
        writer.merge(6, year+"年-"+month+"月统计表"); //lastColumn = 列数-1
        // 一次性写出内容
        writer.write(rows, true);
        // 微调一下每个列的宽度
        writer.setColumnWidth(0,12);
        writer.setColumnWidth(1,16);
        writer.setColumnWidth(2,24);
        writer.setColumnWidth(3,34);
        writer.setColumnWidth(4,10);
        writer.setColumnWidth(5,200);
        writer.setColumnWidth(6,8);
        // 此处的response.setContentType 和教程里的不同
        response.setContentType("application/octet-stream");
        // filename就是表格的名字,这个无所谓,反正前端还会重命名
        response.setHeader("Content-Disposition","attachment;filename=test.xlsx");
        // 输出流
        ServletOutputStream servletOutputStream = response.getOutputStream();
        writer.flush(servletOutputStream,true);
        // 关闭writer,释放内存
        writer.close();
        // 关闭输出Servlet流
        IoUtil.close(servletOutputStream);
}

注意,第21行那个,ExcelWriter writer = ExcelUtil.getWriter(true),第一个小坑点,如果要导出的是xlsx,这个括弧里的true是一定要加的!!

第35行的response.setContentType("application/octet-stream"),与教程里的不同,我用教程里的会报错,故选用此。


然后是前端,先写个api.js

//引入axios
import axios from 'axios'
//请求延时(毫秒数,如果请求话费超过了'timeout'的时间,请求将被中断)
axios.defaults.timeout 100000
//导出exce1
export const export2 params =>{
    return axios.get(`后端接口的地址`,{params params,responseType:'blob'})
}

这里axios一定要加那个responseType:'blob',不然前端拿到的流下下来的文件会有格式问题!

之后就写相关的method

methods:{
    //导出excel的method
    exportExcel(){
        const params = {
          month: this.month,
          year : this.year
        }
        export2(params).then(
          (res)=>{
            let blob = new Blob([res.data], {type: "application/vnd.ms-excel",});
         // application/vnd.ms-excel为excel类型文档 
            let fileName = this.year+"年-"+this.month+"月会议统计表.xlsx";
            if (window.navigator && window.navigator.msSaveOrOpenBlob) {
              // IE
              window.navigator.msSaveOrOpenBlob(blob, fileName);
            } else {
              let objectUrl = (window.URL || window.webkitURL).createObjectURL(
                blob
              );
              let downFile = document.createElement("a");
              downFile.style.display = "none";
              downFile.href = objectUrl;
              downFile.download = fileName; // 下载后文件名
              document.body.appendChild(downFile);
              downFile.click();
              document.body.removeChild(downFile); // 下载完成移除元素 // window.location.href = objectUrl
              window.URL.revokeObjectURL(objectUrl); // 只要映射存在,Blob就不能进行垃圾回收,因此一旦不再需要引用,就必须小心撤销URL,释放掉blob对象。
            }
          }
        )
}

页面里直接用这个method就行了,需要注意的是第10行那里的new Blob 的type类型,需要的话对照着看文章来源地址https://www.toymoban.com/news/detail-471176.html

Hutool工具类实现的简易excel文件导出方法

到了这里,关于Hutool工具类实现的简易excel文件导出方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端基于XLSX实现数据导出到Excel表格,以及提示“文件已经被损坏,无法打开”的解决方法

    一、vue实现导出excel 1、前端实现 xlsx是一个用于读取、解析和写入Excel文件的JavaScript库。它提供了一系列的API来处理Excel文件。使用该库,你可以将数据转换为Excel文件并下载到本地。这种方法适用于在前端直接生成Excel文件的场景。 更多介绍可参见官网 1、安装xlsx依赖 2、引

    2024年01月23日
    浏览(84)
  • Excel 导入导出(前端处理:xslx)(后端处理:hutool+poi || Easy Excel )

      目录 Excel 导入导出(前端处理:xslx) 代码示例 导入Excel数据 将数据封装好后传给后端  导出数据 预览(vue-office/excel\\\"……;docx-preview) Excel 导入导出(后端处理:hutool+poi || Easy Excel ) 前端 后端使用Hutool处理Excel 文件 Hutool-poi是针对Apache POI的封装,因此需要用户自行引入

    2024年01月24日
    浏览(72)
  • 纯前端 导出Excel文件(包括导出用数组数据模拟文件数据和实际后端返回的文件数据)的 方法

            在纯前端导出文件的一种常见方法是通过生成下载链接来实现,可以使用Blob对象和URL.createObjectURL()方法来实现,因为现在工作中主要运用的前端框架是Angular,这篇文章将以angular为例进行阐述。 一、示例代码 1. 首先,安装FileSaver库(https://github.com/eligrey/FileSaver.j

    2024年04月23日
    浏览(36)
  • poi实现Excel文件的导入导出

    poi结构说明 引入poi依赖包 第一步、获取表内容数据: 根据表头内容与实体类属性对应的map,利用反射机制获取get方法来取出该实体数据 第二步、开始导出 编辑表格内样式 第三步、设定响应请求头格式,发送文件到客户端 判断表格行数据是否为空 判断表格列值是否为空 设

    2024年02月12日
    浏览(47)
  • EasyExcel实现Excel文件导入导出功能

    Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或者JVM频繁的full gc。 EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。

    2024年02月02日
    浏览(68)
  • Java实现数据导出到excel文件

    使用的依赖:Apache提供的poi包 首先导入依赖  核心实现  这个工作表指的是这个 运行结果   现在你完成了往一个单元格里写数据,如果想要做成一个表格,那就需要循环 例如现在有一个需求:现在要统计学生的签到情况,需要把学生的签到记录导出到Excel表中 这里我们用假

    2024年02月11日
    浏览(40)
  • poi实现Excel文件导出【SpringBoot篇】

    在系统中,数据库的excel文件导出是一项及为基础的功能。此篇文章将通过实例利用poi实现excel文件导出。 Jakarta POI 是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API 。目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生

    2024年02月05日
    浏览(44)
  • vue 实现前端处理 “数组数据“ 转excel格式文件,并导出excel表格

    一、安装插件 XLSX 二、页面引入        希望我的愚见能够帮助你哦~,若有不足之处,还望指出,你们有更好的解决方法,欢迎大家在评论区下方留言支持,大家一起相互学习参考呀~

    2024年01月18日
    浏览(56)
  • poi实现excel文件导入导出(基本数据导出、含格式导出、含批注导出、含图片图表导出)——springboot

    本文主要是介绍springboot + poi实现基本的excel文件导入导出,包含数据导出导入时数据的其他需求校验,导出含有批注信息、导出含有图片信息、导出含有图表信息等的介绍等等,主要是一个demo尽可能简单明了的来介绍相关功能即可。有什么问题可以在留言哦!并在文章末尾附

    2024年02月08日
    浏览(81)
  • vue+xlsx实现前端模版下载、导入和导出excel文件

    产品需求:后端不想写下载,导入和导出的接口,让我们前端自己实现。 这里我们就可以用xlsx插件来实现,我们不多说了,先放一下实现的图片,下面我们分别把模版下载、导入和导出的代码放上来,想用的话,直接复制粘贴即可! 模版下载图片 导出图片: 好了,下面我

    2024年02月13日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包