springMVC中从Excel文件中导入导出数据
创始人
2024-11-06 06:07:21

目录

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

1. 数据库展示

在这里插入图片描述

2. 导入依赖

pom.xml

                              commons-io             commons-io                               commons-fileupload             commons-fileupload                               commons-lang             commons-lang                                         org.apache.poi             poi             3.15          

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

                                 

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 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():最后一列的下标+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--不是,默认是true 		contentType:false,//设置ajax向后台提交参数之前,是否把所有的参数统一按urlencoded编码:true--是,false--不是,默认是true 		type:'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 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             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. 参考链接

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...