获取CSV文件,转成Excel格式的文件供用户从浏览器下载

news2025/8/3 0:07:38

前言

最近这十几天每天都很充实,刚完成了几个小需求;今天简单记录一下其中一个:从某系统获取csv文件,然后处理成可供用户在浏览器中下载的Excel文件;

这其中有解除到新的内容,也有利用项目已有的部分功能代码。借此机会记录下来,一来方便自己回顾,二来分享这么一种思路;

获取CSV文件

这个需求是和另一个团队合作实现的,需要从他们那里获取csv文件;对接的时候很有意思(***************给我整笑了);

具体就是由他们提供 Amazon S3 的几个配置值,如:AccessID、AccessKey、bucket、path等值,由于需求是产品转述给我的,这些并没有文档;根据demo尝试拼了一下path,都报key的错误;就跟他们确认,希望他们可以提供一个样例;结果对方团队一个非开发的热心好大姐一个劲儿给我解释什么是bucket!

但是我们的需求是以日期作为参数,从上面取文件;bucket应该是他们存储文件时设置的对吧!我们应该在path上拼接日期参数才对~

下面这个是获取文件的demo:

这几个参数配置正确后就可以拿到相应的CSV文件了,接下来就是对CSV文件进行相应的转换;

CSV文件转成Bean对象

基于我们的系统里原有的导出功能,需要把这个CSV文件转换成一个List< Bean > 的格式;

具体实现也是从网上学习的,首先需要有一个对应的bean对象:

每一项都要加上@CsvBindByName注解

然后要对上面那个demo进行改造,要让其对CSV文件按照第一行进行解析,返回格式是一个list:

之后调用的时候,把参数传进去,用List< Bean> 去接收:


List<ExcelCaEngineCSVDTO> csvData  = AkskUtil.getCsvData(alertDate, ExcelCaEngineCSVDTO.class);

复制代码

接下来对list进行一些操作,在接口中利用ExcelUtil.export 返回

public static <T> void export(HttpServletResponse response, String fileName, String sheetName, List<T> dataList, Class<T> clazz) {
    try {
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding(Charsets.UTF_8.name());
        fileName = URLEncoder.encode(fileName, Charsets.UTF_8.name());
        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream(), clazz).sheet(sheetName).doWrite(dataList);
    } catch (Throwable var6) {
        throw var6;
    }
}
复制代码

前端处理

前端做的处理首先就是:增加按钮,传参调用后台接口;


export function 接口名(data) {
  return request({
    url: '',
    method: 'post',
    data: data,
    responseType: 'blob'
  })
}

复制代码

以上接口的返回值作为下面导出方法的入参;对上述接口的返回值按下述方法进行处理:

当时在这个地方卡了很久;因为周一到周五天天摸鱼,只能周末写代码,在家写到这里的时候由于前段接口的声明里没加 responseType: 'blob',导致下载的文件打不开(如下图),当时也是很烦哈哈哈哈;周一来了办公室一排查就解决了,当时真的很有成就感!

总结

这个需求的完成真的让我感受到了编程的乐趣;当然前提是工作氛围舒适,领导大部分情况下是按计划推进哈哈哈;作为一个没写过多少代码的不算新人的新人,一步步摸索着完成需求,还是很有成就感的!

以上就是整个需求的实现思路,首先获取csv文件,然后解析成相应的格式,最后下载;期间和其他团队的沟通也让我很有收获,文字永远词不达意,解决问题的更快的途径还不如打个电话!还有就是,工作时间尽可能地工作,别总摸鱼~over

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/16009.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧图书馆解决方案-最新全套文件

智慧图书馆解决方案-最新全套文件一、建设背景二、思路架构三、建设方案四、获取 - 智慧图书馆全套最新解决方案合集一、建设背景 现下&#xff0c;传统图书馆已经难以适应时代的发展&#xff0c;图书盘点繁琐、管理模式落后、阅读时间和场地受限等问题&#xff0c;迫使传统图…

148. SAP UI5 表格数据如何导出成 Excel 文件(Table Export As Excel)

本教程前一步骤,我们在介绍 SAP UI5 SmartTable 时,提到了它的 Excel 导出功能。如果将 iseExportToExcel 设置为 true,就可以启用 Excel 导出功能,将 Table 控件显示的数据,导出成本地 Excel 文件。 我们仍然秉承本教程一贯从易到难的学习思路,先暂时不去碰 Smart Table…

30天消化MyBatis源码解析笔记,吊打面试官,offer接到手软

MyBatis 是一个优秀的 Java 持久化框架&#xff0c;SSM 框架组合&#xff08;Spring SpringMVC Mybatis&#xff09;&#xff0c;依赖 MyBatis 搭建的项目更是数不胜数&#xff0c;在互联网公司的使用中&#xff0c;占据了大片江山&#xff0c;你在使用 MyBatis 吗&#xff1…

嵌入式开发:RTOS调试——处理计时问题

毫无疑问&#xff0c;当你开始在嵌入式开发中使用实时操作系统(RTOS)时&#xff0c;会有一个学习曲线。你将在更高的抽象层次上工作&#xff0c;使用或多或少的并行任务&#xff0c;而不仅仅是子例程&#xff0c;并且你需要考虑你的任务应该如何彼此共享数据和处理器时间。你需…

一个系统五个场景,vivo的IoT能否以“慢”取胜?

近年来物联网声浪喧嚣尘上&#xff0c;但其实从移动互联网到IoT只有一步之遥。原因在于手机可以很好的完成“控制中枢”的作用&#xff0c;以手机为核心在IoT领域“开枝散叶”是目前行业的主流选择&#xff0c;这也是小米、华为等手机巨头在IoT领域如鱼得水、产品众多的重要原因…

企业如何防备密码攻击

在身份安全周&#xff0c;了解密码在网络安全中的重要性很有必要&#xff0c;如果您不小心&#xff0c;密码很容易被泄露。ManageEngine ADSelfService Plus如何帮助强化密码并增强企业组织安全性的呢&#xff1f; 现在是 2022 年——密码在今天仍然适用吗&#xff1f; 技术…

Docker(九)—— Docker 网络

我们之前通过端口映射实现过外部主机对容器的访问&#xff0c; 那如果想要实现两个容器之间的通信怎么办&#xff1f;用已有的经验&#xff0c;是像图中蓝色的线那样走吗&#xff1f; 一、Docker0网络 我们运行一个容器&#xff0c;进入容器内部后发现容器也有自己的IP地址。 而…

磁盘占用高问题如何排查?三步教你搞定

作者简介&#xff1a;杨嘉力&#xff0c;OceanBase开源内核高级工程师。 通常情况下&#xff0c;数据库对磁盘的占用量会随着业务的接入时间和业务数据量大增而不断上升&#xff0c;导致磁盘空间不足&#xff0c;进而发生数据无法写入、数据库无法重启等问题。这时我们就需要排…

CENTOS上的网络安全工具(十三)搬到Docker上(1)?

鉴于在集群上构建安全工具的情况越来越频繁&#xff0c;并且现在一些安全工具也提供了Docker形式的部署&#xff0c;再停留在虚拟机yum的部署方式似乎已经不太合时宜了。所以在再一次碰到一个安全工具需要使用docker安装的时候&#xff0c;我们毅然&#xff08;被逼&#xff09…

[附源码]SSM计算机毕业设计中小企业人事管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]Python计算机毕业设计安庆师范大学校园互助平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

C语言学习记录(十二)之字符串和字符串函数

文章目录一、字符串和字符串I/O1.1 定义字符串1.1.1 字符串字面量(字符串常量)1.1.2 字符串数组和初始化1.1.3 数组和指针1.1.4 数组和指针的区别二、字符串输入2.1 分配空间2.2 gets()函数 (不建议使用)2.3 gets()的替代品2.3.1 fgets()函数(和fputs())2.3.2 gets_s()函数2.3.…

【推荐算法毕业设计源码】个性化学习推荐网站的设计及实现丨可定制

登录该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。 目录 一、项目介绍&#xff1a; 二、文档学习资料&#xff1a; 三、模块截图&#xff1a; 四、开发技术与运行环境&#xff1a; 五、代码展示&#xff1a; 六、数据库表截图&#x…

UE4 GIS Cesium for Unreal插件的使用 教程

效果&#xff1a;&#xff08;成都郫都区某区域的运行场景&#xff09; 步骤&#xff1a; 1.到虚幻商城搜索 cesiuml&#xff0c;点击Cesium for Unreal 打开后可以看到目前支持的版本有4.26-4.27和5.0 将其安装到引擎 大概0.2G 2.下载完成后&#xff0c;打开4.26版本的虚幻编…

Study Git - Shell command with Git

前言 这一部分内容主要记录git使用时的重要命令&#xff0c;文章参考&#xff1a; MIT Missing classGit Pro Basic git help \<command>: get help for a git commandgit init: creates a new git repo, with data stored in the .git directorygit status: tells yo…

pytest学习和使用9-fixture中conftest.py如何使用?

9-fixture中conftest.py如何使用&#xff1f;1 引入2 conftest.py简介3 conftest.py特点4 实例4.1 conftest.py4.2 test_conftest1.py4.3 test_conftest2.py5 conftest.py优先级1 引入 之前学习使用fixture前置实现用例的登陆&#xff0c;当时在一个脚本中实现的&#xff1b;那…

基于PHP+MySQL学生创新作品展示系统的设计与实现

MySQL学生创新作品展示系统的基本功能包括用户注册登录,发布作品,查看作品和对评论评论以及在线留言等信息。 PHP本科学生创新作品展示系统是一个服务类型的网站,系统通过PHp&#xff1a;MySQL进行开发,分为前台和后台两部分,前台部分主要是让大学生查看和发布创新作品使用的。…

N3-PEG-MAL,Azdio-PEG-Maleimide,一种点击化学PEG试剂

击化学PEG试剂叠氮-聚乙二醇-马来酰亚胺&#xff0c;该化学试剂其英文名为Azdio-PEG-Maleimide&#xff0c;&#xff08;N3-PEG-MAL&#xff09;。所属分类为&#xff1a;Azide PEG Maleimide PEG。 化学试剂叠氮-PEG-马来酰亚胺的分子量均可定制&#xff0c;有&#xff1a;N3…

音视频开发面试题集锦

下面是 2022.06 月音视频面试题集锦内容的节选&#xff1a; 一、如何根据 NALU 裸流数据来判断其是 H.264 编码还是 H.265 编码&#xff1f; 1&#xff09;通常我们不是根据 NALU 裸流数据中的信息来选择解码器&#xff0c;而是根据媒体封装层的信息来确定解码器。 媒体封装层…

理解TCP协议三次握手、四次挥手、流量控制、拥塞控制 、重传机制

&#x1f468;‍&#x1f4bb;个人主页&#xff1a; 才疏学浅的木子 &#x1f647;‍♂️ 本人也在学习阶段如若发现问题&#xff0c;请告知非常感谢 &#x1f647;‍♂️ &#x1f4d2; 本文来自专栏&#xff1a; 计算机网络 &#x1f308; 每日一语&#xff1a;真正的勇气是&…