在线问题反馈模块实战(十七):实现excel模板在线下载功能

👨‍🎓作者:bug菌

✏️博客:CSDN掘金

💌公众号:猿圈奇妙屋

🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。

🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。

一、概述🔥

       接下来的这几期,bug菌想跟大家分享一下自己昨天刚接到一个临时的需求,热乎着呢,想分享一下自己是如何面对临时需求并制定整个开发周期,其中包括从梳理业务到创建业务表再到实现业务逻辑形成闭环再到与前端对接,其中会穿插一些业务拓展及功能性拓展,这一条龙流程在线与大家一起见证,分享给刚入门的小伙伴,希望对你们有所帮助。

环境说明:idea2019.3 + springboot2.3.1.REALSE + mybati-plus3.2.0 + mysql5.6 + jdk1.8

       若小伙伴们在批阅文章的过程中觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐️+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,创作不停💕,加油☘️ 

二、正文🔥

        时光荏苒,本模块开发任务也即将接近尾声。带着大家做了将近快20期的模块全业务开发,不知道你们收获大不大,反正对于自己,我是察觉到了自己还有很多知识点掌握的不够熟练,需要好好恶补呀,路还很长,咱们一起努力。

        对于这期,我要带着大家手把手教学,如何实现excel模板文件如何从服务器中下载到本地?就对于这么个业务场景,想必大家并不陌生,那么来吧,八仙过海各显神通。看看大家都对此有何不同的实现方法。

        那么,请大家都放马过来吧。

三、如何代码实现excel模板下载🔥

1️⃣定义Controller请求

        既然确定了业务场景为下载excel模板,也就是从服务器下载资源,那好吧,还是老样子,先确定请求格式。比如请求入参,返回参类型,请求路径等。

具体请求定义如下:

    /**
     * 问题反馈excel模板下载
     */
    @GetMapping("/download-model")
    @ApiOperation(value = "问题反馈excel模板下载", notes = "问题反馈excel模板下载")
    public void download() {
        userQuestionsService.download();
    }

2️⃣定义接口方法downLoad()

        由于没有返回值,所以直接void即可。

    /**
     * excel模板下载
     */
    void download();

3️⃣实现downLoad()方法

        我是将该template路径配置于yaml配置文件中了,也方便日后测试环境、正式环境修改其保存路径即可。

    //获取template绝对路径
    @Value("${review.file.template}")
    private String templatePath;


    /**
     * excel模板下载
     */
    @Override
    public void download() {

        //绝对目录地址
        String target = templatePath + "问题反馈导入模板.xlsx";
        uploader.downloadExcel(target);
    }

由于我是直接放在了当前本地项目的template文件夹下,你们也可以随意指定路径。我为了给大家演示,我就指定了本地excel的存放路径了。

给大家看一眼我演示项目excel模板存放位置:仅供参考。

具体excel下载核心代码实现如下:

    /**
     * excel下载
     */
    public void downloadExcel(String targetPath) {
        FileInputStream inputStream = null;
        HttpServletResponse response = SpringServletContextUtils.getResponse();
        try {
            //设置文件头,最后一个参数是设置下载文件名
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(FilenameUtils.getName(targetPath), StandardCharsets.UTF_8.name()));
            File file = new File(targetPath);
            inputStream = new FileInputStream(file);
            OutputStream outputStream = response.getOutputStream();
            IOUtils.copyLarge(inputStream, outputStream);

            outputStream.flush();
        } catch (IOException e) {
            log.error(e.getMessage(), e);
        } finally {
            //关流
            IOUtils.closeQuietly(inputStream);
        }
    }

        而且我注意到如果用浏览器请求,肯定是无法设置请求头的,所以我将该接口加到了我的common模块中,该模块有做白名单免token鉴权处理,在其模块下的所有接口都不会被token登录鉴权器所拦截,所以对于我接口模板导出测试就非常方便了。因为我注意到如果通过postman测试导出,下载到本地会是一个.zip的文件,所以暂时放弃了用postman做测试工具。

如下我是直接选择用浏览器进行接口请求测试。直接访问浏览器输入请求地址即可。

        接着我们来debug一下,看看我们所传入的target目标路径是否正确且存在?

如下截图我确定是真实存在且确定是excel模板存放位置。你们也要检查一下,路径有问题也肯定不会实现文件下载成功的。

        去掉断点,直接运行结束,可以看下,浏览器直接弹出下载,我检查了下,虽文件内容格式等都是对的,但是其文件名乱码,这肯定不行。到底是啥原因导致?那又该如何解决呢?

        分析问题得出,对于中文读取的时候不给编码,它可能就用别的编码(不一定适合中文),就会导致中文乱码。所以想读取中文,你就得写明编码格式。

        所以给出的解决方案就是在对设置写入excel文件名时,明确编码格式。如何指定呢?这就用到了这个函数:URLEncoder.encode(String s, String enc),该方法能将使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式,其格式是浏览器默认的编码格式。那在上述代码中,你只需要这么改就行。

具体修改代码如下:

//            response.setHeader("Content-Disposition", "attachment;fileName=" + FilenameUtils.getName(targetPath));
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(FilenameUtils.getName(targetPath), StandardCharsets.UTF_8.name()));
  

4️⃣接口测试

        指定编码后我们重启项目,我们再来试一下。经测试,导出的文件名是中文展示了。我们再来检查一下导出的excel文件内容是否也存在乱码问题?经检查一切正常。

        说明上述代码已ok!可供业务使用。也供小伙伴们一键copy。

附上,postman测试导出功能,却文件名依旧乱码!

大家请看: 

        我是选择该【Send and Download】选项,一般是用于对接口有文件下载导出功能所用。

        我选择保存到本地桌面后,打开文件,内容格式都没问题,但是就是文件名乱码了。 

         至于这个问题,我暂时没有想到好的解决方案,这儿先放着,等我想到了解决方案再来修复这一块的bug。你们就暂时按浏览器的方式进行文件下载测试导出就好了。

5️⃣总结

        对于越简单的逻辑接口而言,我们都要百分百用心写。

 ... ...

        好啦,以上就是这期的所有内容啦,你们学废了么?如果对你有所帮助,还请不要忘记给bug菌[三连支持]哟。如果想获得更多的学习资源或者想和更多的技术爱好者一起交流,可以关注我的公众号『猿圈奇妙屋』,后台回复关键词领取学习资料、大厂面经、面试模板等海量资源,就等你来拿。

四、往期热文推荐🔥

        对于问题反馈模块实战开发,我完整的梳理了每一期的教学及链接地址,仅供参考:希望能对你们有所帮助。

        如上是整整二十期内容,每一期都是干货,对于一个模块的开发,如何一点一滴打造并测试部署上线,我再说一遍,这不是演习,是实战!是实战!是实战!

        若你们觉得只是需要了解其中某个知识点或者业务的话,也不反对,你就选择其中的几期进行学习就好,反正都已经完结啦;我只希望你们能有所收获,有所成长,也就不枉我苦心每天下班后给大家总结更新。

五、文末🔥

        如果你还想要学习更多,小伙伴们大可关注bug菌专门为你们创建的专栏《springboot零基础入门教学》,都是我一手打下的江山,持续更新中,希望能帮助到更多小伙伴们。

       我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

        最后送大家两句我很喜欢的话,与诸君共勉!


☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以开始。

🍀你能从现在开始改变,也可以一成不变;这件事,没有规矩可言,你可以活出最精彩的自己。


💌如果文章对您有所帮助,就请留下您的吧!(#^.^#);

💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;

💗如果对文章有任何疑问,还请文末留言或者加群吧【QQ交流群:708072830】;

💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Excel模板软件开发模块是指通过编写代码和使用相关工具,对Excel软件进行定制化开发的一部分。该模块通常有以下几个主要功能: 1. 模板设计:软件开发模块可用于设计Excel模板,包括创建表格、定义数据格式、设置样式和布局等。开发人员可以根据用户需求和业务逻辑,自定义Excel模板的结构和功能。 2. 数据处理:模板软件开发模块可以对Excel中的数据进行处理,如数据导入、数据清洗、数据转换等。通过编写代码,开发人员可以实现数据的自动化抽取、整理和分析,提高工作效率和数据准确性。 3. 功能扩展:软件开发模块还可以对Excel软件进行功能扩展,通过编写宏(Macro)或使用插件(Add-in)等方式,实现更多的功能和特性。例如,可以开发自定义函数、自动化报表生成、图表绘制等特定功能,以满足用户的特定需求。 4. 与外部系统集成:模板软件开发模块还可以与外部系统进行集成,通过编写代码和使用相关API,实现Excel与其他业务系统的数据交互。这样可以实现数据的无缝传输和共享,提高数据的准确性和一致性。 总的来说,Excel模板软件开发模块是用于对Excel软件进行个性化定制和功能扩展的开发环节。通过编写代码和使用相关的工具,开发人员可以为用户提供更加灵活、高效、定制化的Excel应用。 ### 回答2: Excel模板是一种预先设计好的电子表格文件,用于存储和处理数据。通过Excel模板,用户可以快速创建具有特定功能的电子表格,例如财务报表、项目计划、销售数据分析等。Excel模板可以节省用户的时间和精力,提高工作效率。 在软件开发中,Excel模板模块可以提供以下功能: 1. 模板设计:开发人员可以根据用户需求和业务规则,设计和创建定制化的Excel模板。这个过程通常包括确定表格结构、字段设置、公式编写等。通过模板设计,可以确保模板具有灵活性和可扩展性,以满足不同的业务需求。 2. 数据导入:Excel模板模块可以支持从外部数据源导入数据到模板中。这样用户就可以将现有的数据快速导入到Excel模板中,方便后续的数据处理和分析。导入数据的方式可以包括手动输入、数据连接、数据导入等。 3. 数据处理:Excel模板可以通过预设的公式和函数,对导入的数据进行自动计算和处理。例如,可以进行数值加减、求平均值、排序等操作。这样用户可以在不需要编写复杂程序的情况下,实现数据的自动处理和分析。 4. 数据输出:Excel模板模块可以支持将处理后的数据输出到其他系统。例如,可以将数据导出为CSV、PDF等格式,以方便在其他系统中使用。同时,也可以将Excel模板作为报表模板,生成可视化和易读的报告。 总之,Excel模板模块在软件开发中是一个非常有用的功能,可以帮助用户快速创建和处理 Excel 数据,提高工作效率和准确性。同时,通过定制化的模板设计,可以满足不同业务需求,使Excel模板成为一个强大的数据处理工具。 ### 回答3: Excel模板软件开发模块是指在Excel软件中开发的模块,用于定制化开发一些特定功能的应用程序。 Excel模板软件开发模块主要包括以下几个方面: 1. VBA编程:VBA是Visual Basic for Applications的缩写,是一种嵌入在Excel中的编程语言。通过使用VBA编程,可以为Excel模板添加各种自定义功能,如宏命令、自动计算、自动填充等。 2. 数据处理:Excel模板软件开发模块可以用于数据处理,例如创建复杂的数据分析模型、数据清洗和转化、数据的导入和导出等。通过使用Excel的数据处理功能,可以帮助用户快速方便地进行数据分析和决策。 3. 用户界面设计:Excel模板软件开发模块可以根据用户需求进行界面设计,使用户可以通过操作按钮、下拉列表、单选框等方式与模板进行交互。用户界面设计的目的是让用户能够方便地操作Excel模板,并且使界面美观、易懂。 4. 数据源连接:Excel模板软件开发模块可以通过连接不同的数据源,如数据库、网上数据源等,来获取数据。通过数据源连接,可以实现实时数据更新和数据的自动导入,提高Excel模板的数据质量和准确性。 5. 报表生成:Excel模板软件开发模块可以根据用户需求,生成各种类型的报表。用户可以自定义报表的格式、样式和内容,使报表的生成符合用户的需求和要求。 综上所述,Excel模板软件开发模块是通过在Excel软件中进行VBA编程,实现数据处理、用户界面设计、数据源连接和报表生成等功能模块。通过使用这些模块,可以为用户定制化开发出各种特定功能Excel模板应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bug菌¹

你的鼓励将是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值