`
xiaoxiong_it
  • 浏览: 130097 次
  • 性别: 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  
不错,给我启发很大,也解决了我的问题

相关推荐

    JXL(Java操作Excel文件Oracle数据库)

    为了将这两个过程结合起来,我们可以先用JXL读取Excel文件中的数据,然后通过OracleImporter类将这些数据批量插入到数据库。在这个过程中,可能需要对数据进行一些预处理,比如类型转换,错误检查等。 值得注意的是...

    JXL操作EXCEL 数据库导出EXCEL相关文件

    本篇文章将深入探讨JXL库在操作Excel和数据库导出Excel文件方面的应用。 首先,我们来了解JXL的基本用法。JXL支持读取和写入Biff8格式的Excel文件(即97-2003版本的.XLS文件),这涵盖了大部分常见的Excel文件需求...

    java导入excel到数据库

    以上就是关于“Java导入Excel到数据库”的详细知识点,涵盖了文件路径配置、合并单元格处理、数据库连接、Excel操作和数据导入等多个方面。这个过程需要对Java、数据库操作以及Excel处理有深入理解,才能有效地完成...

    利用jxl把excel中的数据导入数据库

    标题“利用jxl把excel中的数据导入数据库”指的是使用Java Excel API(jxl)这个库来读取Excel文件中的数据,并将这些数据批量地导入到关系型数据库中。这是一个常见的需求,特别是在处理大量结构化数据时,例如进行...

    struts2 poi,jxl向excel表中插入记录源代码

    7. **部署与运行**: 下载项目后,你需要将所有依赖的库(如Struts2、POI或JXL的jar文件)添加到项目的类路径中,然后将项目部署到支持Servlet容器(如Tomcat)的服务器上,根据提示修改Excel文件路径,即可运行程序...

    java利用jxl导入Excel表格并保存到本地数据库

    在Java开发中,导入Excel数据并将其保存到本地数据库是一项常见的任务,特别是在处理大量结构化数据时。这里我们将深入探讨如何使用jxl库来实现这一功能。 jxl是一个流行的Java库,专门用于读写Microsoft Excel文件...

    java利用jxl读取excel文件

    `jxl`库是一个广泛使用的第三方库,它允许开发者轻松地读取、写入和修改Excel文件。本篇文章将深入探讨如何利用`jxl.jar`包来实现这一功能。 首先,确保你已经正确地将`jxl.jar`文件添加到你的项目类路径中。这可以...

    jsp导excel到mysql数据库.docx

    我们可以使用jxl库来读取excel文件,并将数据导入到mysql数据库中。 首先,我们需要在jsp文件中引入jxl库,并创建一个Workbook对象,用于读取excel文件。 `jxl.Workbook rwb = null;` 然后,我们可以使用Workbook...

    数据库内容导入到Excel jxl.jar包

    现在,既然我们已经下载了jxl.jar,就可以开始编写Java代码来实现数据库内容导入到Excel的功能。首先,从数据库中提取数据,然后使用jxl库将数据写入Excel工作表。这通常涉及到数据库查询、结果集遍历以及使用jxl的...

    Excel导入导出 jxl及Poi 工具类

    导入时,通常会解析Excel文件,将数据映射到Java对象,然后存储在数据库中;导出时,从数据库获取数据,生成Excel文件。 为了更好地理解这两个库的用法,你可以查看提供的"Excel导入导出(jxl及Poi)工具类"压缩包中...

    导入Excel数据到数据库

    ### 导入Excel数据到数据库:详细步骤与代码解析 #### 一、前言 在实际工作中,我们经常需要将Excel文件中的数据批量导入到数据库中。这种需求常见于数据迁移、数据分析等领域。本文将详细介绍如何使用Java Excel ...

    将excel的内容导入到数据库.zip

    7. **数据库导入**:文件“将excel的内容导入到数据库中.doc”很可能是详细的操作指南,描述了如何设置数据库连接,创建表结构,以及执行SQL语句来批量导入Excel数据。 在实际操作中,开发者通常会先使用Java库(如...

    jxl excel批量导入

    这个过程在处理大量数据时非常有用,比如将数据库中的数据导出到Excel,或者从Excel文件中导入数据到数据库。 在描述中提到的“博文链接:https://xgtxxxx.iteye.com/blog/1616979”,虽然具体链接无法访问,但可以...

    jxl导入导出excel完美运行demo

    这个"jxl导入导出excel完美运行demo"提供了从零开始进行数据导入导出的基础模板,通过学习和理解这个示例,开发者能够快速掌握使用`jxl`库处理Excel文件的方法,并应用于实际项目中。 总之,`jxl`库是Java处理Excel...

    jxl java对excel的操作,导入mysql中

    在“jxl java对excel的操作,导入mysql中”这个主题中,我们将探讨如何使用JXL库来处理Excel数据,并将这些数据有效地导入到MySQL数据库中。 首先,你需要下载并引入JXL库到你的Java项目中。`jxl.jar`是主要的库...

    使用jxl解析excel(.xls)固定模板(智联简历为例)

    这通常涉及到文件上传操作,可以使用Apache Commons FileUpload或者其他文件上传库来实现。确保文件被安全地保存在服务器的临时目录中。 2. **临时存储**:一旦文件上传完成,将其保存到一个临时位置,避免对原始...

Global site tag (gtag.js) - Google Analytics