SSM excel文件的导入导出

  对于excel文件的导入导出,后台接收读取和建表封存都是固定死的,所以对于excel导入时,excel文件内容必须匹配后台相关对象,不然报错。

  excel文件导出,用<a><a/>标签即可,通过后台去完成 ,不可用ajax去写导出,ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。

文件的下载是以二进制形式进行的,ajax没法解析后台返回的文件流,所以无法处理二进制流response输出来下载文件。

当获取前台导入这个命令后,会通过Mybatis获取mysql数据库所有相关数据,通过for循环将获取集合中一个个对象及对象属性写入表中,导出。

  对于excel文件的导入则是可以通过form表单和ajax两种方法导入,前者在controller控制器里面返回字符串,会直接显示在页面上,需要手动重新刷新页面。

后者……,虽然很想使用,但网上并没有找到有关纯ajax写入后台的案例,不过有几类别人封装好的ajax插件用于写入excel文件的,有兴趣可以去找找。

文件上传,控制台获取到文件,读取文件里面value值,封存到其对象中,通过Mybatis保存数据库中。(UPDATE good SET g_id = UUID(),mybatis添加对象时uuid为主键,只要mysql主键为String类型长度足够容纳uuid自动生成长度)

<!-- html -->
<!-- excel文件导出 -->
<p><a href="${pageContext.request.contextPath}/user/exportExcel">导出</a>
<!-- excel文件导入 -->
<form action="${pageContext.request.contextPath}/user/importExcel" method="post" enctype="multipart/form-data">
	<input type="file" name="userExcel" />
	<input type="submit" value="导入">
</form>
//控制层//导出excel文档
	@RequestMapping("/exportExcel")
	@ResponseBody
	public void exportExcel(HttpServletRequest request,HttpServletResponse response){
		try {
			//获取数据源
			List<User> userList = userService.queryUserAll();

			//导出excel
			response.setHeader("Content-Disposition","attachment;filename="+new String("用户信息.xls".getBytes(),"ISO-8859-1"));
			response.setContentType("application/x-excel;charset=UTF-8");
			OutputStream outputStream = response.getOutputStream();
			//导出
			userService.exportExcel(userList,outputStream);
			outputStream.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
//导入
	@RequestMapping("/importExcel")
	//@ResponseBody
	public String importExcel(MultipartFile userExcel,HttpServletRequest request,HttpSession session){
		if(userExcel == null){
			session.setAttribute("excelName", "未上传文件,上传失败!");
			return "redirect:queryUserAll";
		}
		String userExcelFileName = userExcel.getOriginalFilename();
		if(!userExcelFileName.matches("^.+\\.(?i)((xls)|(xlsx))$")){
			session.setAttribute("excelName", "文件格式不正确!请使用.xls或.xlsx后缀的文档,导入失败!");
			return "redirect:queryUserAll";
		}
		//导入
		try {
			userService.importExcel(userExcel);
		} catch (IOException | InvalidFormatException e) {
			e.printStackTrace();
		}
		session.setAttribute("excelName", "导入成功!");
		return "redirect:queryUserAll";
	}
//service层//导出
@Override
	public void exportExcel(List<User> userList, OutputStream outputStream) throws IOException {
		//1.创建工作簿
		HSSFWorkbook hwb =new HSSFWorkbook();
		//1.1创建合并单元格
		//CellRangeAddress cellRangeAddress =new CellRangeAddress(0,0,0,4);
		//2.创建工作表
		HSSFSheet sheet = hwb.createSheet("用户信息表");
		//2.1添加合并单元格
		//sheet.addMergedRegion(cellRangeAddress);
		//3.1创建第一行及单元格
		HSSFRow row1 = sheet.createRow(0);
		HSSFCell cell1 = row1.createCell(0);
		cell1.setCellValue("用户信息");
		//3.2创建第二行及单元格
		HSSFRow row2 = sheet.createRow(1);
		String[] row2Cell = {"编号","姓名","性别","年龄","部门名称"};
		for (int i =0 ; i < row2Cell.length ; i++ ){
			row2.createCell(i).setCellValue(row2Cell[i]);
		}
		//3.3创建第三行及单元格
		if(userList!= null && userList.size()>0){
			for(int j=0 ; j<userList.size() ;j++){
				HSSFRow rowUser = sheet.createRow(j+2);
				rowUser.createCell(0).setCellValue(userList.get(j).getId());
				rowUser.createCell(1).setCellValue(userList.get(j).getName());
				rowUser.createCell(2).setCellValue(userList.get(j).getSex());
				rowUser.createCell(3).setCellValue(userList.get(j).getAge());
				//rowUser.createCell(4).setCellValue(userList.get(j).getId());
			}
		}
		//5.输出
		hwb.write(outputStream);
	}

  

//导入
@Override
	public void importExcel(MultipartFile userExcel) throws IOException, InvalidFormatException {
		//获取输入流
		InputStream inputStream = userExcel.getInputStream();
		//创建读取工作簿
		Workbook workbook = WorkbookFactory.create(inputStream);
		//获取工作表
		Sheet sheet = workbook.getSheetAt(0);
		//获取总行
		int rows=sheet.getPhysicalNumberOfRows();
		if(rows>2){
			//获取单元格
			for (int i = 2; i < rows; i++) {
				Row row = sheet.getRow(i);
				User user =new User();

				try {
					String id = row.getCell(0).getStringCellValue();
					user.setId(Integer.parseInt(id));
				} catch (IllegalStateException e) {
					int id=(int)row.getCell(0).getNumericCellValue();
					user.setId(id);
				}

				String name = row.getCell(1).getStringCellValue();
				user.setName(name);

				String sex = row.getCell(2).getStringCellValue();
				user.setSex(sex);

				try {
					String age = row.getCell(3).getStringCellValue();
					user.setAge(Integer.parseInt(age));
				} catch (IllegalStateException e) {
					int age=(int)row.getCell(3).getNumericCellValue();
					user.setAge(age);
				}
				//想数据库中添加新对象
				addUser(user);//方法
			}

		}

		inputStream.close();
	}

  

  

原文地址:https://www.cnblogs.com/colourless/p/10012253.html

时间: 2024-10-18 23:13:33

SSM excel文件的导入导出的相关文章

java项目中Excel文件的导入导出

1 package poi.excel; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 import java.lang.reflect.Field; 7 import java.lang.reflect.Method; 8 import java.util.ArrayList; 9 import java.util.List; 10 11 import

poi excel文件的导入

使用poi来实现excel文件的导入导出.使用struts2来做处理. 首先看jsp页面: index.jsp: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC

java实现文件批量导入导出实例(兼容xls,xlsx)

1.介绍 java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下. 目前我所接触过的导入导出技术主要有POI和iReport,poi主要作为一些数据批量导入数据库,iReport做报表导出.另外还有jxl类似poi的方式,不过貌似很久没跟新了,2007之后的office好像也不支持,这里就不说了. 2.POI使用详解 2.1 什么是Apache POI? Apache POI是Apache软件基金会的开放源码函式库,

使用phpExcel实现Excel数据的导入导出(完全步骤)

使用phpExcel实现Excel数据的导入导出(完全步骤) 很多文章都有提到关于使用phpExcel实现Excel数据的导入导出,大部分文章都差不多,或者就是转载的,都会出现一些问题,下面是本人研究phpExcel的使用例程总结出来的使用方法,接下来直接进入正题. 首先先说一下,本人的这段例程是使用在Thinkphp的开发框架上,要是使用在其他框架也是同样的方法,很多人可能不能正确的实现Excel的导入导出,问题基本上都是phpExcel的核心类引用路径出错,如果有问题大家务必要对路劲是否引用

excel 文件的导入

excel 文件的导入 1.\extra_apps\xadmin\plugins下,添加一个文件 excel.py 添加以下代码: import xadminfrom xadmin.views import BaseAdminPlugin,ListAdminViewfrom django.template import loader # excel 导入class ListImportExclePlugin(BaseAdminPlugin): import_excel = False def i

java使用POI操作excel文件,实现批量导出,和导入

一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel. POI全称 Poor Obfuscation Implementation,直译为"可怜的模糊实现",利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:htt

【C#常用方法】2.DataTable(或DataSet)与Excel文件之间的导出与导入(使用NPOI)

DataTable与Excel之间的互导 1.项目添加NPOI的引用 NPOI项目简介: NPOI是一个开源的C#读写Excel.WORD等微软OLE2组件文档的项目,特点是可以在没有安装Office的情况下对Word或Excel文档进行读写操作.并且对老版本Office(2003-)与新版本Office(2007+)均有较好的支持.NPOI功能非常强大,可以操作Excel或Word文档的各个细节,如果你对NPOI想进行细致的学习,淘宝上有专门有书来讲NPOI,当然也可以访问NPOI的官方网站查

Python脚本——excel文件按列导出

将一个excel文件每一列的内容分别导出到一个txt文件中,txt文件名为excel的列名. 1 #!/usr/bin/python 2 # -*- coding: UTF-8 -*- 3 import xlrd #导入xlrd模块 4 5 6 def is_number(s): #判断是否为数字 7 try: 8 float(s) 9 return True #是数字返回True 10 except ValueError: 11 pass 12 13 def main(): 14 workbo

MFC ListControl 与 Excel 数据的导入导出

ListControl View类型选择Report void CExcelTestDlg::OnBnClickedInput() { // TODO: Add your control notification handler code here CFileDialog dlg( TRUE,//TRUE或FALSE.TRUE为打开文件:FALSE为保存文件 _T("xls"), //为缺省的扩展名 _T( "FileList"), //为显示在文件名组合框的编辑框