springboot+vue实现excel的导出

news2025/1/18 10:07:49

首先是springboot对数据的处理

依赖的导入

 <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
@RequestMapping("/exportExcel")
public R exportResult(HttpServletResponse response) {
    XSSFWorkbook xssfSheets = kucunService.formGeneration();
    String fileName = "Goods报表.xlsx";
    OutputStream outputStream = null;
    try {
        fileName = URLEncoder.encode(fileName, "UTF-8");
        //设置ContentType请求信息格式
        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName);
        outputStream = response.getOutputStream();
        xssfSheets.write(outputStream);
        System.out.println(xssfSheets);
        outputStream.flush();
        outputStream.close();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return R.ok();
}

service层

 public XSSFWorkbook formGeneration() {
        //查询数据库中的数据
        List<kuchun> listBlogVOS = kucunDao.getAllKuchunList();

        XSSFWorkbook xssfSheets = new XSSFWorkbook();

        XSSFSheet userList = xssfSheets.createSheet("库存药品表");

        Row titleRow = userList.createRow(0);//创建第一行,起始为0
        titleRow.createCell(0).setCellValue("id");//第一列
        titleRow.createCell(1).setCellValue("药品编码");
        titleRow.createCell(2).setCellValue("药品名称");
        titleRow.createCell(3).setCellValue("仓库");
        titleRow.createCell(4).setCellValue("库存数量");
        titleRow.createCell(5).setCellValue("盘点数量");
        titleRow.createCell(6).setCellValue("是否盘点");

        for (int i = 0; i < listBlogVOS.size(); i++) {
            Row row = userList.createRow(i + 1);//设置对哪一行操作
            row.createCell(0).setCellValue(listBlogVOS.get(i).getId());
            row.createCell(1).setCellValue(listBlogVOS.get(i).getDrugcode());
            row.createCell(2).setCellValue(listBlogVOS.get(i).getDrugname());
            row.createCell(3).setCellValue(listBlogVOS.get(i).getStorename());
            row.createCell(4).setCellValue(listBlogVOS.get(i).getNumber());
            row.createCell(5).setCellValue(listBlogVOS.get(i).getPandianstock());
            if(listBlogVOS.get(i).getNormal()=="0"){
                row.createCell(6).setCellValue("库存正常");
            }else{
                row.createCell(6).setCellValue("库存不正常");
            }
        }

        return xssfSheets;
    }

dao层

    List<kuchun> getAllKuchunList();

xml文件

<resultMap id="BaseResultMap" type="com.example.quanxian.entity.kuchun">
		<id column="id" jdbcType="INTEGER" property="id" />
		<result column="drugname" jdbcType="VARCHAR" property="drugname" />
		<result column="drugcode" jdbcType="VARCHAR" property="drugcode" />
		<result column="storeid" jdbcType="INTEGER" property="storeid" />
		<result column="number" jdbcType="INTEGER" property="number" />
		<result column="pandianstock" jdbcType="INTEGER" property="pandianstock" />
		<result column="normal" jdbcType="VARCHAR" property="normal" />
		<result column="updatetime" jdbcType="VARCHAR" property="updatetime" />
		<result column="createtime" jdbcType="VARCHAR" property="createtime" />
		<result column="storename" jdbcType="VARCHAR" property="storename" />
		<association property="store" javaType="com.example.quanxian.entity.store">
			<id column="aid" jdbcType="INTEGER" property="id" />
			<result column="storename" jdbcType="VARCHAR" property="storename"/>
			<result column="address" jdbcType="VARCHAR" property="address"/>
		</association>
	</resultMap>


	<select id="getAllKuchunList" resultMap="BaseResultMap" parameterType="com.example.quanxian.entity.kuchun">
		select kuchun.*,store.storename as storename,store.address,store.id as aid
		from kuchun
				 left join store on kuchun.storeid = store.id
	</select>

前端excel对文件流进行对应的处理

let exportExcelParam=()=>{
      exportExcel().then(res=>{
        console.log(res)
        const link = document.createElement("a");
        const blob = new Blob([res], {
          type: "application/vnd.ms-excel;charset=utf-8",
        });
        link.style.display = "none";
        link.href = URL.createObjectURL(blob);
        link.setAttribute("download", `库存药品.xls`);
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
      })
    }

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

excel文件的导出

在这里插入图片描述

Vue前端处理后端返回的文件流乱码,导出Excel

二:接口(注意:一定要加上responseType: ‘blob’)
// 导出
export function exportAllList (data) {
return request({
url: ‘/word/group/exportWords’,
method: ‘post’,
data: data,
responseType: ‘blob’
})
}

三:页面掉接口

exportAllList(params).then((res) => {
//这里是重点
const link = document.createElement(“a”);
const blob = new Blob([res], {
type: “application/vnd.ms-excel;charset=utf-8”,
});
link.style.display = “none”;
link.href = URL.createObjectURL(blob);
link.setAttribute(“download”, 词库数据.xls);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
this.msgSuccess(“导出成功”);
});

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

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

相关文章

【SpringBoot项目】SpringBoot项目-瑞吉外卖【day01】

文章目录前言软件开发整体介绍软件开发流程瑞吉外卖项目介绍项目介绍产品原型展示技术选型功能架构角色开发环境搭建数据库环境搭建maven项目搭建设置静态资源映射后台登录需求分析代码开发功能测试后台退出需求分析代码开发功能测试&#x1f315;博客x主页&#xff1a;己不由心…

JVS低代码如何实现复杂物料编码?

日常业务过程中&#xff0c;存在大量的编码&#xff0c;例如订单的流水号&#xff0c;复杂的物料编码&#xff0c;学生证号等等场景&#xff0c;那么通过JVS如何去实现各种编码&#xff1f; 为了让使用者使用尽量简单&#xff0c;我们编码分为简单配置的编码和复杂配置的编码。…

[附源码]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…

docker stats查询容器状态显示异常有模线

docker stats 命令用来显示容器使用的系统资源。 默认情况下&#xff0c;stats 命令会每隔 1 秒钟刷新一次输出的内容直到你按下 ctrl c。 输出详情介绍&#xff1a; CONTAINER ID 与 NAME: 容器 ID 与名称。 CPU % 与 MEM %: 容器使用的 CPU 和内存的百分比。 MEM USAGE…

Java基础之《netty(1)—netty介绍》

一、介绍 1、netty是由JBOSS提供的一个java开源框架&#xff0c;现为github上的独立项目。 2、netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;可以快速开发高性能、高可靠的网络IO程序。 3、netty主要针对在TCP协议下&#xff0c;面向clients端的高并发应用&…

【python3】4.文件管理

2022.11.16 本学习内容总结于莫烦python:4.文件管理 https://mofanpy.com/tutorials/python-basic/interactive-python/read-write-file4 文件管理 4.1 读写文件 均是用特殊字符open 4.1.1 创建文件 f open("new_file.txt", "w") # 创建并打开 f.wr…

进入数字化供应链高潮期,与IBM咨询共创无边界竞争力

供应链领域的国际专家马丁克里斯托弗在30年前就提出“未来的竞争不再是企业和企业之间的竞争&#xff0c;而是供应链之间的竞争。”近几年来&#xff0c;基于工业4.0技术的供应链4.0开始进入业界的视野&#xff0c;2020年开始的疫情让全球供应链结束了长期稳定状态而进入VUCA&a…

针对谷氨酰胺运输体的小分子抑制剂

精准癌症治疗手段 在运输体水平靶向谷氨酰胺代谢 ACST2 蛋白是谷氨酰胺进入癌细胞的主要转运蛋白。在肺癌、乳腺癌、结肠癌等癌症中&#xff0c;ACST2 蛋白水平的上调与患者存活率有关。当抑制 ACST2 基因表达时&#xff0c;会显著抑制癌细胞生长。ASCT2 水平升高与多种癌症的…

【支付】支付安全

这里写目录标题1. 加密 - 对称加密与非对称加密1.1 对称加密1.2 非对称加密1.3 对称加密与非对称加密区别2. 身份认证公钥加密&#xff0c;私钥解密&#xff08;加密信息&#xff09;私钥加密&#xff0c;公钥解密&#xff08;身份认证&#xff09;3. 摘要算法与数据完整性3.1 …

深度剖析 Vue3 在浏览器的运行原理

上一讲我们学习了 Vue 响应式的大致原理&#xff0c;响应式就是可以把普通的 JavaScript 对象包裹成响应式对象&#xff0c;这样&#xff0c;我们对对象做的修改&#xff0c;响应式都能够监听到&#xff0c;并且执行 effect 内部注册的函数来执行数据修改之后的效果 那今天我就…

公司建网站多少钱?【网站多少钱】

很多公司成立初期会选择建一个公司网站&#xff0c;那么首先就会考虑公司建网站多少钱的问题。公司建网站多少钱会受到建网站方式的影响&#xff0c;不同方式费用不同&#xff0c;那么下面就说说公司建网站多少钱。 1、公司有团队&#xff0c;自己建 公司有技术团队的情况&am…

【FLASH存储器系列九】ONFI数据接口详述之二

目录 1.1 总线状态 1.2 ZQ校准 1.3 CE_n引脚缩减机制 1.4 差分信号 1.5 Warm up周期 1.6 从SDR到NV-LPDDR4的技术发展总结 1.1 总线状态 SDR 的总线状态&#xff1a; NV-DDR总线状态&#xff1a;值为11b的ALE/CLE 用于数据传输。总线状态在CLK的上升沿开始&#xff0c;持续…

最高效“双11”背后:圆通更不一样了

每年的“双11”都是一场看不见硝烟的战争&#xff0c;有人守着直播间抢货&#xff0c;也有人守着电脑追发货。 河南商丘大学城附近的某电商老板陈泽宇就是后者中的一员。每年“双11”他都高度紧张&#xff0c;提前许多天就开始备货&#xff0c;每天既要紧盯前台销量数字&#…

Leetcode 学习记录 数组与字符串

基础不牢&#xff0c;地动山摇。这句话就是描述我现在的阶段&#xff0c;虽然这些天在csdn的练习上进展还比较顺利&#xff0c;但是内心还是没有底的。实话说&#xff0c;csdn的练习题和leetcode上的比起来&#xff0c;还是真的相差很远。可能是不和口味吧。我还是比较喜欢Leet…

厉害了我们的“中国制造”,新能源“智造”强大到你想象不到

“中国制造”是近日的一大“热词”。 “中国制造”的新能源汽车花式“出海”&#xff0c;产销量连续7年位居全球首位&#xff1b;“中国制造”的过冬八件套反向海淘&#xff0c;订单暴增&#xff1b;“中国制造”的高铁首次全产业链“出海”…… 显而易见&#xff0c;当前是中国…

Unity导表工具Luban插件的数据加载原理与优化

文章目录1. 配置Luban并测试2. Luban 数据加载原理3. 根据工程进行懒加载优化3.1 增加公共接口与接口实现方法3.2 外部提供获取数据的方法3.3 对Luban中的导表模板进行修改4. 优化后测试如果初入坑&#xff0c;Luban配置可以参考宝鱼大佬的视频教程 强力配置工具luban使用教程【…

消除卡顿 mac MATLAB2022b m1/m2原生下载安装 教程

目录 1、版本说明 2、下载链接 2.1、百度网盘链接 2.2、官网下载链接 3、安装 1、版本说明 之前苦于安装matlab 2022b的Intel Rosetta转译版本&#xff0c;真的是明显感受到了卡顿&#xff0c;今天终于等到了2022b的原生版本&#xff0c;安装后占用10.09G内存。 ​​​​…

0096 克鲁斯卡尔算法,迪杰斯特拉算法

/* * 克鲁斯卡尔算法 * 1.用来求加权连通图的最小生成树的算法 * 2.思想&#xff1a;按照权值从小到大的顺序&#xff0c;选择n-1条边&#xff0c;并保证这n-1条边不构成回路 * 3.先构造一个只含n个顶点的森林&#xff0c;依权值从小到大从连通网中选择边加入到森林中 * …

web自动化测试-webdriver实现

webdriver实现基本语法1.Select下拉列表1.1下拉列表单选1.2下拉列表多选2.非Select下拉列表3.文件上传1.1input单个文件上传1.2input多个文件上传1.3非input文件上传1.Select下拉列表 1.1下拉列表单选 from selenium import webdriver from selenium.webdriver.support.ui imp…

GPU驱动及CUDA安装流程介绍

安装前准备工作 确认GPU型号和操作系统版本   准备gpu驱动和CUDA软件包   在nvidia官网进行驱动包下载   GPU驱动下载链接    Linux系统均选择 Linux 64-bit、CUDA Toolkit选择最新版本   注意该版本一定要大于等于cuda软件的版本。   选择CUDA及GPU驱动版本&#…