【SSH项目实战】国税协同平台-7.POI导入用户列表文件

上次我们使用POI技术完成了用户列表的打印工作,下面我们来完成用户列表Excel文件的导入。

我们要导入这个Excel文件到我们的系统中:

确切的说,是我们要将excel中的数据导入到数据库中保存起来

我们的操作过程:

1、获取excel文件

2、导入

2.1、读取工作簿

2.2、读取工作表

2.3、读取行

2.4、读取单元格

2.5、保存用户

下面我们来进行具体的实现工作

我们在用户列表的jsp页面中可以看到还有一个“导出”的按钮,

<input type="button" value="导出" class="s_button" onclick="doExportExcel()"/> 
<input name="userExcel" type="file"/>

我们为这个按钮设置一个点击事件,使用js让其链接到我们的导入路径,从而跳转相应的Action进行导入工作:

//导入列表
function doImportExcel(){
	document.forms[0].action="${basePath}tax/user_importExcel.action";
	document.forms[0].submit();
}

我们在UserAction中添加importExcel导出方法:

//导入用户列表
public String importExcel(){
	//1、获取excel文件
	if(userExcel !=null){
		//是否是excel
		if(userExcelFileName.matches("^.+\\.(?i)((xls)|(xlsx))$")){
			//2、导入
			userService.importExcel(userExcel,userExcelFileName);
		}
	}
	return "list";
}

我们在userService接口中添加importExcel导出方法,然后在userServiceImpl中实现这个方法:

//前面要加这三个属性,以及get和set方法
private File userExcel;
private String userExcelContantType;
private String userExcelFileName;

@Override
public void importExcel(File userExcel, String userExcelFileName) {
	try {
		FileInputStream fileInputStream = new FileInputStream(userExcel);
		//判断是否是03版本的Excel(还是07的)
		boolean is03Excel = userExcelFileName.matches("^.+\\.(?i)(xls)$");
		//1、读取工作簿
		Workbook workbook = is03Excel ? new HSSFWorkbook(fileInputStream)
				: new XSSFWorkbook(fileInputStream);
		//2、读取工作表
		Sheet sheet=workbook.getSheetAt(0);
		//3、读取行
		if(sheet.getPhysicalNumberOfRows()>2){
			User user=null;
			for (int i = 2; i < sheet.getPhysicalNumberOfRows(); i++) {
				//4、读取单元格
				Row row=sheet.getRow(i);
				user=new User();

				//用户名
				Cell cell1=row.getCell(0);
				user.setName(cell1.getStringCellValue());
				//账号
				Cell cell2=row.getCell(1);
				user.setAccount(cell2.getStringCellValue());
				//所属部门
				Cell cell3=row.getCell(2);
				user.setDept(cell3.getStringCellValue());
				//性别
				Cell cell4=row.getCell(3);
				user.setGender(cell4.getStringCellValue().equals("男"));
				//电子邮箱
				Cell cell5=row.getCell(4);
				user.setEmail(cell5.getStringCellValue());

				//导入用户的初始密码为123456
				user.setPassword("123456");
				//默认用户状态为有效
				user.setState(User.USER_STATE_VALID);

				//5、保存用户
				userDao.save(user);
			}
		}
		workbook.close();
		fileInputStream.close();
	} catch (Exception e) {
		e.printStackTrace();
	}
}

我们重启服务器来测试一下:

之前的用户列表只有四个人:

然后我们点击导入,并导入我们准备好的导入文件:

点击确定之后,发现列表中多了我们之前导入的数据:

说明我们的导入方法完成!

至此我们用户列表的“导入”和“导出”功能全部编写完毕!

转载请注明出处:http://blog.csdn.net/acmman/article/details/49401251

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 03:02:57

【SSH项目实战】国税协同平台-7.POI导入用户列表文件的相关文章

【SSH项目实战】国税协同平台-1.项目介绍

项目介绍 1.1项目背景国税协同办公平台包括了行政管理.后勤服务.在线学习.纳税服务.我的空间等几个子系统:我们本次主要的开发功能是纳税服务子系统的部分模块和基于纳税服务子系统信息的个人工作台首页.纳税服务子系统是办税PC前端或移动端的后台管理系统,主要包括的功能有系统角色管理.用户管理.信息发布管理.投诉受理.纳税咨询.易告知.服务预约.服务调查等模块. 系统的主界面: 我们要做的模块界面: 1.2项目前期 项目前期:一般是由客户经理从客户那边了解到有关该项目的招标信息,然后开发公司再组织竞标

【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流

[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我介绍了如何在网关上增加自定义客户端授权功能,从设计到编码实现,一步一步详细讲解,相信大家也掌握了自定义中间件的开发技巧了,本篇我们将介绍如何实现自定义客户端的限流功能,来进一步完善网关的基础功能. .netcore项目实战交流群(637326624),有兴趣的朋友可以在群里交流讨论. 一.功能描述 限流就是为了保证网关在高并发或瞬时并发时,在服务能承受范围内,牺牲部分请求为代价,保证系统的整体可用性而做的安全策略,避免单个服务

【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析

[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我介绍了如何在网关上实现客户端自定义限流功能,基本完成了关于网关的一些自定义扩展需求,后面几篇将介绍基于IdentityServer4(后面简称Ids4)的认证相关知识,在具体介绍ids4实现我们统一认证的相关功能前,我们首先需要分析下Ids4源码,便于我们彻底掌握认证的原理以及后续的扩展需求. .netcore项目实战交流群(637326624),有兴趣的朋友可以在群里交流讨论. 一.Ids4文档及源码 文档地址 http:/

【.NET Core项目实战-统一认证平台】第十章 授权篇-客户端授权

原文 [.NET Core项目实战-统一认证平台]第十章 授权篇-客户端授权 [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了如何使用Dapper持久化IdentityServer4(以下简称ids4)的信息,并实现了sqlserver和mysql两种方式存储,本篇将介绍如何使用ids4进行客户端授权. .netcore项目实战交流群(637326624),有兴趣的朋友可以在群里交流讨论. 一.如何添加客户端授权? 在了解如何进行客户端授权时,我们需要了解详细的授权流程

【.NET Core项目实战-统一认证平台】第十一章 授权篇-密码授权模式

[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了基于Ids4客户端授权的原理及如何实现自定义的客户端授权,并配合网关实现了统一的授权异常返回值和权限配置等相关功能,本篇将介绍密码授权模式,从使用场景.源码剖析到具体实现详细讲解密码授权模式的相关应用. .netcore项目实战交流群(637326624),有兴趣的朋友可以在群里交流讨论. 一.使用场景? 由于密码授权模式需要用户在业务系统输入账号密码,为了安全起见,对于使用密码模式的业务系统,我们认为是绝对可靠的,不存在

【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程

原文:[.NET Core项目实战-统一认证平台]第十二章 授权篇-深入理解JWT生成及验证流程 [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本篇就针对第一个思考问题详细的讲解下Ids4是如何生成access_token的,如何验证access_token的有效性,最后我们使用.net webapi来实现一个外部接口(本来想用JAVA来实现的,

【.NET Core项目实战-统一认证平台】第十四章 授权篇-自定义授权方式

[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我介绍了如何强制令牌过期的实现,相信大家对IdentityServer4的验证流程有了更深的了解,本篇我将介绍如何使用自定义的授权方式集成老的业务系统验证,然后根据不同的客户端使用不同的认证方式来集成到统一认证平台. .netcore项目实战交流群(637326624),有兴趣的朋友可以在群里交流讨论. 一.自定授权源码剖析 当我们需要使用开源项目的某些功能时,最好了解实现的原理,才能正确和熟练使用功能,避免出现各种未知bug问

【.NET Core项目实战-统一认证平台】第十五章 网关篇-使用二级缓存提升性能

原文:[.NET Core项目实战-统一认证平台]第十五章 网关篇-使用二级缓存提升性能 [.NET Core项目实战-统一认证平台]开篇及目录索引 一.背景 首先说声抱歉,可能是因为假期综合症(其实就是因为懒哈)的原因,已经很长时间没更新博客了,现在也调整的差不多了,准备还是以每周1-2篇的进度来更新博客,并完成本项目所有功能. 言归正传,本重构项目是在我根据实际需求重构,由于还未完全写完,所以也没进行压测,在2月份时,张善友老师给我留言说经过压测发现我重构的Ocelot网关功能性能较差,其中

【.NET Core项目实战-统一认证平台】第十六章 网关篇-Ocelot集成RPC服务

原文:[.NET Core项目实战-统一认证平台]第十六章 网关篇-Ocelot集成RPC服务 [.NET Core项目实战-统一认证平台]开篇及目录索引 一.什么是RPC RPC是"远程调用(Remote Procedure Call)"的一个名称的缩写,并不是任何规范化的协议,也不是大众都认知的协议标准,我们更多时候使用时都是创建的自定义化(例如Socket,Netty)的消息方式进行调用,相比http协议,我们省掉了不少http中无用的消息内容.因此很多系统内部调用仍然采用自定义