`
xiaoxiong_it
  • 浏览: 130107 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Jxl 导入Excel文件到数据库

阅读更多

这两天用jxl简单的实现了Excel文件的导入导出,下面是我的一些总结(当然有很多是参照别人的代码)。
jsp页面代码:

/Excel文件导入到数据库中
function importEmp(){
	//检验导入的文件是否为Excel文件
	var excelPath = document.getElementById("excelPath").value;
	if(excelPath == null || excelPath == ''){
		alert("请选择要上传的Excel文件");
		return;
	}else{
		var fileExtend = excelPath.substring(excelPath.lastIndexOf('.')).toLowerCase(); 
		if(fileExtend == '.xls'){
		}else{
			alert("文件格式需为'.xls'格式");
		    return;
		}
	}
	//提交表单
	document.getElementById("empForm").action="<%=request.getContextPath()%>/EmpExcel.action.EmpExcelAction.do?method=importEmployeeInfos";  
	document.getElementById("empForm").submit();
}

   <input type="file" id="excelPath" name="excelPath"/>&nbsp;&nbsp;
   <input type="button"  value="导入Excel" onclick="importEmp()"/>

action:

/**
	 * Excel中的数据导入到数据库中(Excel中的字段已限定)
	 * @param mapping
	 * @param form
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	public ActionForward importEmployeeInfos(ActionMapping mapping, ActionForm form, 
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		logger.debug(">>>importEmployeeInfos()");
		//从页面接收参数:文件的路径
		String excelPath = request.getParameter("excelPath");
		//输入流
		InputStream fis = new FileInputStream(excelPath);
		//得到解析Excel的实体集合
		List<EmployeeInfo> infos = ImportEmployee.importEmployee(fis);
		
		//遍历解析Excel的实体集合
		for(EmployeeInfo info:infos) {
			//判断员工编号是否存在(存在:做修改操作;不存在:做新增操作)
			EmployeeInfo info1 = this.selectEmpByEmpNum(info.getEmployeeNumber());
			if(info1 == null) {
				//把实体新加到数据库中
				this.service.addEmployeeInfo(info);
			}else{
				//把personId封装到实体
				info.setPersonId(info1.getPersonId());
				//更新实体
				this.updatEmployeeInfo(info);
			}
		}
		//关闭流
		fis.close();
		logger.debug("<<<importEmployeeInfos()");		
		return this.findEmployeeInfos(mapping, form, request, response);
	}
	
	/**
	 * 根据员工编号查找一个员工实体
	 * @param employeeNumber 员工编号
	 * @return 实体
	 */
	private EmployeeInfo selectEmpByEmpNum(String employeeNumber) {
		
		logger.debug(">>>selectEmpByEmpNum(String employeeNumber)");
		
		EmployeeInfo employeeInfo = new EmployeeInfo();
		employeeInfo.setEmployeeNumber(employeeNumber);
		
		EmployeeInfo info =this.service.selectEmployeeInfoByEmpNum(employeeInfo);
		
		logger.debug("<<<selectEmpByEmpNum(String employeeNumber)");
		
		return info;
	}
	
	/**
	 * 更新一条员工信息
	 * @param employeeInfo 已封装的实体
	 * 
	 */
	private void updatEmployeeInfo(EmployeeInfo employeeInfo) {
		
		logger.debug(">>>selectEmpByEmpNum(String employeeNumber)");
		
		this.service.updateEmployeeInfo(employeeInfo);
		
		logger.debug(">>>selectEmpByEmpNum(String employeeNumber)");
		
	}

 导入类:

 

public class ImportEmployee {
	/**
	 * 解析Excel文件中的数据并把每行数据封装成一个实体
	 * @param fis 文件输入流
	 * @return List<EmployeeInfo> Excel中数据封装实体的集合
	 */
	public static List<EmployeeInfo> importEmployee(InputStream fis) {
		
		List<EmployeeInfo> infos = new ArrayList<EmployeeInfo>();
		EmployeeInfo employeeInfo = null;
		
		try {
			//打开文件
			Workbook book = Workbook.getWorkbook(fis);
			//得到第一个工作表对象
			Sheet sheet = book.getSheet(0);
			//得到第一个工作表中的总行数
			int rowCount = sheet.getRows();
			//日期格式化
			DateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
			//循环取出Excel中的内容
			for (int i = 1; i < rowCount; i++) {
				employeeInfo = new EmployeeInfo();
				Cell[] cells = sheet.getRow(i);
				employeeInfo.setOrgId(Long.parseLong(cells[0].getContents()));
				employeeInfo.setEmployeeNumber(cells[1].getContents().toString());
				employeeInfo.setFullName(cells[2].getContents().toString());
				employeeInfo.setSex(cells[3].getContents().toString());
				employeeInfo.setDateOfBirth(new Date());
				employeeInfo.setTownOfBirth(cells[5].getContents().toString());
				employeeInfo.setNationalIdentifier(cells[6].getContents().toString());
				infos.add(employeeInfo);
			}
			
		} catch (BiffException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return infos;
	}
}

 写的比较简单,如有错误,希望讨论和指正。

 

分享到:
评论
3 楼 18335864773 2017-06-30  
poi和jxl 导入导出excel代码量都比较大,而且对office版本的兼容也存在一定的问题,且容易造成内存溢出。还是建议用pageoffice产品生成excel。
2 楼 1260533105 2014-12-25  
  解决我的问题了
1 楼 wangyuchuan520 2013-06-08  
不错,给我启发很大,也解决了我的问题

相关推荐

    Acronis Backup:Acronis备份策略设计原理.docx

    Acronis Backup:Acronis备份策略设计原理.docx

    phpEasyVCS-2.0.zip

    phpEasyVCS-2.0.zip

    2023-04-06-项目笔记 - 第三百五十一阶段 - 4.4.2.349全局变量的作用域-349 -2025.12.18

    2023-04-06-项目笔记-第三百五十一阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.349局变量的作用域_349- 2024-12-18

    【BP回归预测】基于matlab非洲秃鹫算法优化BP神经网络AVOA-BP光伏数据预测(多输入单输出)【Matlab仿真 5152期】.zip

    CSDN Matlab研究室上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    基于java的狄氏皮草服装店销售管理系统源代码(完整前后端+mysql+说明文档+LW).zip

    用户管理: 能够完成用户基本信息录入的注册和用户基本信息的修改。 管理员管理: 能够完成管理员对网站的商品信息管理(商品添加、商品审查)、会员管理(会员审查)、网站信息管理(新闻添加、修改删除、公告设置),以及常规设置(广告添加,友情链接)的功能。 搜索功能: 能过电子商品的名称进行搜索。 查询功能: 能够通过查看购物车对所选商品进行确定、挑选。 环境说明: 开发语言:Java,jsp JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea 部署容器:tomcat

    BLE蓝牙单片机CC2540、CC2541带OSAL操作系统的项目实战开发例程-蓝牙游戏手柄例程(空中鼠标键盘、体感游戏手柄).zip

    1、嵌入式物联网单片机项目开发例程,简单、方便、好用,节省开发时间。 2、代码使用IAR软件开发,当前在CC2540/CC2541上运行,如果是其他型号芯片,请自行调整。 3、软件下载时,请注意接上硬件,并确认烧录器连接正常。 4、有偿指导v:wulianjishu666; 5、如果接入其他传感器,请查看账号发布的其他资料。 6、单片机与模块的接线,在代码当中均有定义,请自行对照。 7、若硬件有差异,请根据自身情况调整代码,程序仅供参考学习。 8、代码有注释说明,请耐心阅读。 9、例程具有一定专业性,非专业人士请谨慎操作。

    【BP回归预测】基于matlab哈里斯鹰算法优化BP神经网络HHO-BP光伏数据预测(多输入单输出)【Matlab仿真 5155期】.zip

    CSDN Matlab研究室上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【BP回归预测】基于matlab飞蛾扑火算法优化BP神经网络MFO-BP光伏数据预测(多输入单输出)【Matlab仿真 5151期】.zip

    CSDN Matlab研究室上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    IO总结总结总结总结总结

    IO总结总结总结总结总结

    基于java的人人乐超市采购管理系统源代码(完整前后端+mysql+说明文档+LW).zip

    系统能够对客户信息管理、订单管理、商品信息管理、供应商管理、库存管理,系统用户管理等信息提供存储、更新、查询、统计的功能。 环境说明: 开发语言:Java,jsp JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea 部署容器:tomcat

    基于java的视频教学考试网源代码(完整前后端+mysql+说明文档+LW).zip

    前台模块: 站内新闻:发布与视频教学相关的新闻和动态。 视频学习:提供视频教学内容,供用户学习。 在线留言:用户可以在线提交留言或反馈。 用户注册:允许新用户注册成为网站的会员。 在线论坛:提供一个在线讨论的平台。 资料下载:提供学习资料或其他相关文件的下载服务。 管理员模块: 系统用户管理:管理系统用户的账户信息。 注册用户管理:管理注册用户的资料和信息。 教师信息管理:管理教师的资料和信息。 站内新闻管理:管理网站新闻内容的发布和更新。 课程信息:管理课程的相关信息。 资料下载管理:管理可供下载的资料。 论坛管理:管理在线论坛的内容和用户互动。 注册用户模块: 教师资料修改:教师可以修改自己的个人信息。 作业发布管理:用户可以发布作业或相关任务。 在线资料下载:注册用户可以下载在线资料。 学生资料管理:学生可以管理自己的资料。 学生下载作业:学生可以下载教师发布的作业。 环境说明: 开发语言:Java,jsp JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea 部署容器:tomcat

    汉普美的ERP简介、实施、应用.ppt

    汉普美的ERP简介、实施、应用.ppt

    深圳混泥土搅拌站资金、现金、费用管理规定.docx

    深圳混泥土搅拌站资金、现金、费用管理规定

    worldgroup manager(瀛海威时空客户端英文原版)

    98年的telnetBBS软件,配合worldgroup server使用(16位),是瀛海威时空客户端的英文原版。

    5aaaaaaaaaaaaaaaaaaaaaa

    5aaaaaaaaaaaaaaaaaaaaaa

    基础的Go微服务框架.zip

    这个项目是一个基础的Go微服务框架,适合作为微服务架构的学习项目。希望这个项目能帮助你入门Go语言的微服务开发!

    2024-2030中国核苷酸市场现状研究分析与发展前景预测报告 Sample Yuan.pdf

    此为报告样本,完整报告的框架结构

    传送带中大块煤识别检测数据集,使用coco json格式对792张图片标注

    传送带中大块煤识别检测数据集,使用coco json格式对792张图片标注,标注图片和标注信息可参考博文:https://backend.blog.csdn.net/article/details/144513245

    DLLDirectX文件快速修复工具

    此工具能快速有效的修复系统缺失的DLL和DirectX文件

    计算机组成原理课程设计(模型机).doc

    计算机组成原理课程设计(模型机).doc

Global site tag (gtag.js) - Google Analytics