当前位置: 首页 > news >正文

springMVC中从Excel文件中导入导出数据

目录

  • 1. 数据库展示
  • 2. 导入依赖
  • 3. 写方法
    • 3.1 导入数据
    • 3.2 导出数据
  • 4. 效果
  • 5. 不足
  • 6. 参考链接

1. 数据库展示

在这里插入图片描述

2. 导入依赖

pom.xml

        <!--文件上传处理--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId></dependency><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId></dependency><!--poi依赖--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.15</version></dependency>

gei
在springmvc.xml中插入语句,限制导入大小

    <!--图片转换器--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 设置上传文件的最大尺寸 --><property name="maxUploadSize" value="10024000"></property></bean>

3. 写方法

3.1 导入数据

@RequestMapping("/workbench/activity/importActivity.do")public @ResponseBody Object importActivity(MultipartFile activityFile, String userName, HttpSession session){System.out.println("userName="+userName);User user=(User) session.getAttribute("sessionUser");ReturnObject returnObject=new ReturnObject();try {InputStream is=activityFile.getInputStream();HSSFWorkbook wb=new HSSFWorkbook(is);//根据wb获取HSSFSheet对象,封装了一页的所有信息HSSFSheet sheet=wb.getSheetAt(0);//页的下标,下标从0开始,依次增加//根据sheet获取HSSFRow对象,封装了一行的所有信息HSSFRow row=null;HSSFCell cell=null;Activity activity=null;List<Activity> activityList=new ArrayList<>();for(int i=1;i<=sheet.getLastRowNum();i++) {//sheet.getLastRowNum():最后一行的下标row=sheet.getRow(i);//行的下标,下标从0开始,依次增加activity=new Activity();activity.setId(UUIDUtils.getUUID());activity.setOwner("2");	// 设置人activity.setCreateTime(DateUtils.formateDateTime(new Date()));activity.setCreateBy("2");	// 设置创造人for(int j=0;j<row.getLastCellNum();j++) {//row.getLastCellNum():最后一列的下标+1//根据row获取HSSFCell对象,封装了一列的所有信息cell=row.getCell(j);//列的下标,下标从0开始,依次增加//获取列中的数据String cellValue= HSSFUtils.getCellValueForStr(cell);if(j==0){activity.setName(cellValue);}else if(j==1){activity.setStartDate(cellValue);}else if(j==2){activity.setEndDate(cellValue);}else if(j==3){activity.setCost(cellValue);}else if(j==4){activity.setDescription(cellValue);}}//每一行中所有列都封装完成之后,把activity保存到list中activityList.add(activity);}//调用service层方法,保存市场活动,这里就不多说了int ret=activityService.saveCreateActivityByList(activityList);// 这里设置一下code,传输给前端returnObject.setCode("1");// 设置数据returnObject.setRetData(ret);}catch (Exception e){e.printStackTrace();returnObject.setCode("0");returnObject.setMessage("系统忙,请稍后重试....");}return returnObject;}

获取随机ID

public class UUIDUtils {public static String getUUID(){return UUID.randomUUID().toString().replaceAll("-","");}
}

获取当前时间

import java.text.SimpleDateFormat;
import java.util.Date;public class DateUtils {/*** 对指定的date对象进行格式化: yyyy-MM-dd HH:mm:ss* @param date* @return*/public static String formateDateTime(Date date){SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String dateStr=sdf.format(date);return dateStr;}/*** 对指定的date对象进行格式化: yyyy-MM-dd* @param date* @return*/public static String formateDate(Date date){SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");String dateStr=sdf.format(date);return dateStr;}/*** 对指定的date对象进行格式化: HH:mm:ss* @param date* @return*/public static String formateTime(Date date){SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss");String dateStr=sdf.format(date);return dateStr;}
}

HSSFUtils.java:关于excel文件操作的工具类

import org.apache.poi.hssf.usermodel.HSSFCell;/*** 关于excel文件操作的工具类*/
public class HSSFUtils {/*** 从指定的HSSFCell对象中获取列的值* @return*/public static String getCellValueForStr(HSSFCell cell){String ret="";if(cell.getCellType()==HSSFCell.CELL_TYPE_STRING){ret=cell.getStringCellValue();}else if(cell.getCellType()==HSSFCell.CELL_TYPE_NUMERIC){ret=cell.getNumericCellValue()+"";}else if(cell.getCellType()==HSSFCell.CELL_TYPE_BOOLEAN){ret=cell.getBooleanCellValue()+"";}else if(cell.getCellType()==HSSFCell.CELL_TYPE_FORMULA){ret=cell.getCellFormula();}else{ret="";}return ret;}
}

前端的设计代码:

//给"导入"按钮添加单击事件
$("#importActivityBtn").click(function () {//收集参数var activityFileName=$("#activityFile").val();var suffix=activityFileName.substr(activityFileName.lastIndexOf(".")+1).toLocaleLowerCase();//xls,XLS,Xls,xLs,....if(suffix!="xls"){alert("只支持xls文件");return;}var activityFile=$("#activityFile")[0].files[0];if(activityFile.size>5*1024*1024){alert("文件大小不超过5MB");return;}//FormData是ajax提供的接口,可以模拟键值对向后台提交参数;//FormData最大的优势是不但能提交文本数据,还能提交二进制数据var formData=new FormData();formData.append("activityFile",activityFile);formData.append("userName","张三");//发送请求$.ajax({url:'workbench/activity/importActivity.do',data:formData,processData:false,//设置ajax向后台提交参数之前,是否把参数统一转换成字符串:true--是,false--不是,默认是truecontentType:false,//设置ajax向后台提交参数之前,是否把所有的参数统一按urlencoded编码:true--是,false--不是,默认是truetype:'post',dataType:'json',success:function (data) {if(data.code=="1"){//提示成功导入记录条数alert("成功导入"+data.retData+"条记录");// 自己设置展示}else{//提示信息alert(data.message);}}});
});

3.2 导出数据

// 导出
@RequestMapping("/workbench/activity/exportAllActivitys.do")
public void exportAllActivitys(HttpServletResponse response) throws Exception{//调用service层方法,查询所有的市场活动,不多说什么,这是基础List<Activity> activityList=activityService.queryAllActivitys();//创建exel文件,并且把activityList写入到excel文件中HSSFWorkbook wb=new HSSFWorkbook();HSSFSheet sheet=wb.createSheet("市场活动列表");HSSFRow row=sheet.createRow(0);HSSFCell cell=row.createCell(0);cell.setCellValue("ID");cell=row.createCell(1);cell.setCellValue("所有者");cell=row.createCell(2);cell.setCellValue("名称");cell=row.createCell(3);cell.setCellValue("开始日期");cell=row.createCell(4);cell.setCellValue("结束日期");cell=row.createCell(5);cell.setCellValue("成本");cell=row.createCell(6);cell.setCellValue("描述");cell=row.createCell(7);cell.setCellValue("创建时间");cell=row.createCell(8);cell.setCellValue("创建者");cell=row.createCell(9);cell.setCellValue("修改时间");cell=row.createCell(10);cell.setCellValue("修改者");//遍历activityList,创建HSSFRow对象,生成所有的数据行if(activityList!=null && activityList.size()>0){Activity activity=null;for(int i=0;i<activityList.size();i++){activity=activityList.get(i);//每遍历出一个activity,生成一行row=sheet.createRow(i+1);//每一行创建11列,每一列的数据从activity中获取cell=row.createCell(0);cell.setCellValue(activity.getId());cell=row.createCell(1);cell.setCellValue(activity.getOwner());cell=row.createCell(2);cell.setCellValue(activity.getName());cell=row.createCell(3);cell.setCellValue(activity.getStartDate());cell=row.createCell(4);cell.setCellValue(activity.getEndDate());cell=row.createCell(5);cell.setCellValue(activity.getCost());cell=row.createCell(6);cell.setCellValue(activity.getDescription());cell=row.createCell(7);cell.setCellValue(activity.getCreateTime());cell=row.createCell(8);cell.setCellValue(activity.getCreateBy());cell=row.createCell(9);cell.setCellValue(activity.getEditTime());cell=row.createCell(10);cell.setCellValue(activity.getEditBy());}}//把生成的excel文件下载到客户端response.setContentType("application/octet-stream;charset=UTF-8");response.addHeader("Content-Disposition","attachment;filename=activityList.xls");OutputStream out=response.getOutputStream();wb.write(out);wb.close();out.flush();
}

前端代码:

//给"批量导出"按钮添加单击事件
$("#exportActivityAllBtn").click(function () {//发送同步请求window.location.href="workbench/activity/exportAllActivitys.do";
});

4. 效果

在这里插入图片描述

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

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

在这里插入图片描述

在这里插入图片描述

5. 不足

无法精准判断每一列对应的数据,必须以一个固定的表规范才能使用

6. 参考链接

相关文章:

springMVC中从Excel文件中导入导出数据

目录 1. 数据库展示2. 导入依赖3. 写方法3.1 导入数据3.2 导出数据 4. 效果5. 不足6. 参考链接 1. 数据库展示 2. 导入依赖 pom.xml <!--文件上传处理--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId>&…...

C++的STL简介(三)

目录 1.vector的模拟实现 1.1begin&#xff08;&#xff09; 1.2end&#xff08;&#xff09; 1.3打印信息 1.4 reserve&#xff08;&#xff09; 1.5 size&#xff08;&#xff09; 1.6 capacity&#xff08;&#xff09; 1.7 push_back() 1.8[ ] 1.9 pop_back() 1.10 insert&…...

BERT模型

BERT模型是由谷歌团队于2019年提出的 Encoder-only 的 语言模型&#xff0c;发表于NLP顶会ACL上。原文题目为&#xff1a;《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》链接 在前大模型时代&#xff0c;BERT模型可以算是一个参数量比…...

举例说明计算机视觉(CV)技术的优势和挑战

计算机视觉&#xff08;CV&#xff09;技术是通过计算机模拟和处理图像与视频数据来模拟人类视觉的能力。它可以带来许多优势&#xff0c;也面临一些挑战。 优势&#xff1a; 自动化&#xff1a;CV技术可以自动处理大量的图像和视频数据&#xff0c;从而提高工作效率和准确性。…...

Animate软件基础:关于补间动画中的图层

Animate 文档中的每一个场景都可以包含任意数量的时间轴图层。使用图层和图层文件夹可组织动画序列的内容和分隔动画对象。在图层和文件夹中组织它们可防止它们在重叠时相互擦除、连接或分段。若要创建一次包含多个元件或文本字段的补间移动的动画&#xff0c;请将每个对象放置…...

mac|安装hashcat(压缩包密码p解)

一、安装Macports&#xff08;如果有brew就不用这一步&#xff09; 根据官网文档&#xff1a;The MacPorts Project -- Download & Installation&#xff0c;安装步骤如下 1、下载MacPorts&#xff0c;这里我用的是tar.gz &#xff0c;可以通过keka&#xff08;keka安装在…...

【保姆级系列:锐捷模拟器的下载安装使用全套教程】

保姆级系列&#xff1a;锐捷模拟器的下载安装使用全套教程 1.介绍2.下载3.安装4.实践教程5.验证 1.介绍 锐捷目前可以通过EVE-NG来模拟自己家的路由器&#xff0c;交换机&#xff0c;防火墙。实现方式是把自己家的镜像导入到EVE-ng里面来运行。下面主要就是介绍如何下载镜像和…...

virtualbox7安装centos7.9配置静态ip

1.背景 我大概在一年之前安装virtualbox7centos7.9的环境&#xff0c;但看视频说用vagrant启动的窗口可以不用第三方工具(比如xshell、secure等)连接centos7.9&#xff0c;于是尝鲜试了下还可以&#xff0c;导致系统文件格式是vmdk了&#xff08;网上有vmdk转vdi的方法&#xf…...

结构型设计模式:桥接/组合/装饰/外观/享元

结构型设计模式&#xff1a;适配器/代理 (qq.com)...

vLLM初识(一)

vLLM初识&#xff08;一&#xff09; 前言 在LLM推理优化——KV Cache篇&#xff08;百倍提速&#xff09;中&#xff0c;我们已经介绍了KV Cache技术的原理&#xff0c;从中我们可以知道&#xff0c;KV Cache本质是空间换时间的技术&#xff0c;对于大型模型和长序列&#xf…...

【Apache Doris】周FAQ集锦:第 18 期

【Apache Doris】周FAQ集锦&#xff1a;第 18 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户…...

docker部署可执行的jar

1.将项目打包&#xff0c;上传到服务器的指定目录 2.在该目录下创建Dockerfile文件 3.Dockerfile写入如下指令 # 基于哪个镜像 FROM java:8 # 拷贝文件到容器&#xff0c;也可以直接写成ADD xxxxx.jar /app.jar ADD springboot-file-0.0.1.jar file.jar RUN bash -c touch /…...

OpenCV||超详细的图像处理模块

一、颜色变换cvtColor dst cv2.cvtColor(src, code[, dstCn[, dst]]) src: 输入图像&#xff0c;即要进行颜色空间转换的原始图像。code: 转换代码&#xff0c;指定要执行的颜色空间转换类型。这是一个必需的参数&#xff0c;决定了源颜色空间到目标颜色空间的转换方式。dst…...

java面向对象期末总结

子类父类方法执行顺序&#xff1f;多态中和子类打印不一样&#xff1b; 子类在实现父类方法的时候没有用super关键字进行调用也会先执行父类的构造方法吗&#xff1f; 是的&#xff0c;当子类实例化时&#xff0c;先执行父类的构造方法&#xff0c;再执行子类的构造方法。即使在…...

文件搜索 36

删除文件 文件搜索 package File;import java.io.File;public class file3 {public static void main(String[] args) {search(new File("D :/"), "qq");}/*** 去目录搜索文件* param dir 目录* param filename 要搜索的文件名称*/public static void sear…...

IO多路转接

文章目录 五种IO模型fcntl多路转接selectpollepollepoll的工作模式 五种IO模型 阻塞IO: 在内核将数据准备好之前, 系统调用会一直等待. 所有的套接字, 默认都是阻塞方式.阻塞IO是最常见的IO模型。非阻塞IO: 如果内核还未将数据准备好, 系统调用仍然会直接返回, 并且返回EWOULD…...

基于深度学习的面部表情分类识别系统

&#xff1a;温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 面部表情识别是计算机视觉领域的一个重要研究方向&#xff0c; 它在人机交互、心理健康评估、安全监控等领域具有广泛的应用。近年来&#xff0c;随着深度学习技术的快速发展&#xf…...

日志远程同步实验

目录 一.实验环境 二.实验配置 1.node1发送方配置 &#xff08;1&#xff09;node1写udp协议 &#xff08;2&#xff09;重启服务并清空日志 2.node2接收方配置 &#xff08;1&#xff09;node2打开接受日志的插件&#xff0c;指定插件用的端口 &#xff08;2&#xff…...

数据结构之《二叉树》(中)

在数据结构之《二叉树》(上)中学习了树的相关概念&#xff0c;还了解的树中的二叉树的顺序结构和链式结构&#xff0c;在本篇中我们将重点学习二叉树中的堆的相关概念与性质&#xff0c;同时试着实现堆中的相关方法&#xff0c;一起加油吧&#xff01; 1.实现顺序结构二叉树 在…...

php json_encode 参数 JSON_PRETTY_PRINT

https://andi.cn/page/621642.html...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里&#xff0c;Bessie 有一个烤箱&#xff0c;可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了&#xff0c;很多小伙伴想体验鸿蒙电脑版操作系统&#xff0c;可惜&#xff0c;鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机&#xff0c;来体验大家心心念念的鸿蒙系统啦&#xff01;注意&#xff1a;虚拟…...