`

excel导入实例---servlet+ext

 
阅读更多
1.页面
UpForm = Ext.extend(Ext.form.FormPanel, {
	id: 'up_form_id',
	constructor: function(config) {
		var newConfig = {};
		Ext.apply(newConfig, config || {}, {
			idProperty: 'up_form',
			labelWidth: 80,
			border: false,
			frame: true,
			autoScroll: true, 
			fileUpload : true, 
			buttonPosition : 'bottom',
			bodyStyle: "padding: 8px",
			trackResetOnLoad: false,
			defaults: {
				border: false,
				bodyStyle: 'padding: 5px 25px 5px 5px;',
				layout: 'form',
				labelWidth: 120
			},   
			items: [{   
		            xtype: 'textfield',   
		            fieldLabel: '文件名称',   
		            id: 'form_file', 
		            inputType: 'file',
		            allowBlank: false,   
		            blankText: '文件名称不能为空.',   
		            anchor: '90%'  // anchor width by percentage   
		        },{   
		            xtype: 'hidden',   
		            name: 'fileName'
		   }] ,
		   buttonAlign:'center',
		   buttons : [{
				   text : '上传',//提交按钮
				   iconCls: 'icon_disk',
				   handler : function(){
				   	   if(upForm.getForm().isValid()){
				   	   	   var fileName = upForm.form.findField("form_file").getValue();
				   	   	//   upForm.form.findField("fileName").setValue(fileName);
				   	   	//   alert(fileName);
					       upForm.form.submit({
					     	   waitMsg : '正在上传文件,请稍候......',//提示信息
					   	 	   waitTitle : '请稍候',//标题
					   		   url : jutil.getRootPath()+'/nurseInfoImport.do',
					           method : 'post',
					           success : function(form, action) {  
				                      Ext.MessageBox.alert('提交失败', action.result.msg);  
				                      Ext.getCmp("form_file").reset();
				               }, 
					           failure:function(form,action){//加载失败的处理函数
					     			 Ext.Msg.alert('提示','导入失败!');
					    	   }
				    		});
				   	   }
				   }
			   },{
				text: '取消',
				iconCls: 'icon_cancel',
				handler: function() {
					var grid=Ext.getCmp(config.title_id);
					grid.hide(); 
				}.createDelegate(this)
			}]
		});
		
		UpForm.superclass.constructor.call(this, newConfig);
	}
}); 

2.控制层
package com.alensic.nursing.sysmgr;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.tomcat.util.http.fileupload.DiskFileUpload;
import org.apache.tomcat.util.http.fileupload.FileItem;

/**
 * 人员信息导入
 * @author 
 *
 */

public class NurseInfoImportServlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
		      throws ServletException, IOException {
		doPost(request, response);
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response)  
            throws IOException, ServletException {  
        try {  
        	String tempPath = "";
            System.out.println("开始进行文件上传");  
            request.setCharacterEncoding("UTF-8");
            DiskFileUpload fu = new DiskFileUpload();  
            fu.setSizeMax(100*1024*1024); // 设置最大文件尺寸,这里是4MB  
            fu.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb  
            fu.setRepositoryPath(tempPath); // 设置临时目录  
            List fileItems = fu.parseRequest(request); // 得到所有的文件:  
            Iterator i = fileItems.iterator();  
            // 依次处理每一个文件:  
            while (i.hasNext()) {  
                FileItem fi = (FileItem) i.next();  
                String fileName = fi.getName();// 获得文件名,这个文件名包括路径:  
                if (fileName != null) {  
                	ImportExcel importNurse = new ImportExcel();
                    importNurse.importExcel(fi.getInputStream());  
                }
            }
        } catch (Exception e) {  
            e.printStackTrace();  
            // 可以跳转出错页面  
            response.getWriter().print("{success:flase,message:'失败'}");  
        }  
  
    }  
}

3.导入
package com.alensic.nursing.sysmgr;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.helix.core.context.MyApplicationContext;

import com.alensic.nursing.hrmgr.NurseInfoDAO;

/**
 * 人员信息导入excel
 * @author zhchen
 *
 */
public class ImportExcel {
	
	private Map map = new HashMap();
	
	//错误信息
	private List<Map> errorList = new ArrayList<Map>();
	
	//excel中字段与数据库中的字段对应
	private String excelRelationDataBase[][]={{"姓名","name"},{"性别","gender"},{"出生日期","birthday"}};
	
	/**
	 * 根据传入的文件创建工作簿
	 * 
	 * @author zhchen
	 * @param filename
	 * @return
	 */
	public List importExcel(InputStream filename){	
		try {
			HSSFWorkbook wb = new HSSFWorkbook(filename);
			return importExcel(wb);
		}catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
    
	/**
	 * 导入excel
	 * 
	 * @author zhchen
	 * @param wb
	 * @param user
	 * @return
	 */
    public List importExcel(HSSFWorkbook wb) {
		map.clear();
		errorList.clear();
		List addList = new ArrayList();
		HSSFSheet sheet = wb.getSheetAt(0);
		int firstRowNum = sheet.getFirstRowNum();
	    int lastRowNum = sheet.getLastRowNum();
	    //数组转换成集合
	    Map excelMap = this.ArrayToMap(excelRelationDataBase);
	    //取得excel表头对应的序列号和表对应的字段
	    Map excelToData = this.excelHeaderToMap(sheet, excelMap, 0);
		for(int h = firstRowNum +1; h <= lastRowNum ;h++){
				Map dataMap = new HashMap();
		    	HSSFRow dataRow = sheet.getRow(h);
		    	//遍历需要保存到数据库的字段
		    	Iterator it = excelToData.keySet().iterator();
		    	for(;it.hasNext();){
		    		int index = Integer.valueOf(it.next().toString());
		    		dataMap.put(excelToData.get(index), dataRow.getCell(index));
		    	}
		    	if(!dataMap.isEmpty())
		    		addList.add(dataMap);
	    }
	    //保存
		NurseInfoDAO nurseInfoDAO = dogetNurseDAO();
		nurseInfoDAO.createBatch(addList);
		return null;
	}
	
	
	
	/**
	 * 数组转换成集合
	 * 
	 * @author zhchen
	 */
	private Map ArrayToMap(String array[][]){
		Map map = new HashMap();
		int length = array.length;
		for(int i=0;i<length;i++){
			map.put(array[i][0], array[i][1]);
		}
		return map;
	}
	
	/**
	 * 取得excel表头对应的序列号和表对应的字段
	 * 
	 * @author zhchen
	 * @param sheet 工作表
	 * @param excelmap 需要导入字段的集合
	 * @param rowNum 取excel第几行的表头
	 * 
	 * @return
	 */
	private Map excelHeaderToMap(HSSFSheet sheet,Map excelmap,int rowNum){
		Map map = new HashMap();
		HSSFRow dataRow = sheet.getRow(rowNum);
		int firstCellNum = dataRow.getFirstCellNum();
    	int lastCellNum = dataRow.getLastCellNum();
    	for(int i=firstCellNum;i<lastCellNum;i++){
    		String headerName = dataRow.getCell(i).toString();
    		Object tableHeaderName = excelmap.get(headerName);
    		if(tableHeaderName != null){
    			map.put(i, tableHeaderName);
    		}
    	}
		return map;
	}
	
	/**
	 * 取得DAO
	 * 
	 * @author zhchen
	 */
	private NurseInfoDAO dogetNurseDAO(){
		return (NurseInfoDAO)MyApplicationContext.getContext().getBean("nurseInfoDAO");
	}
}
分享到:
评论

相关推荐

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    4.17.1 导入样式表 154 4.17.2 包含样式表 155 4.18 模板规则冲突的解决 156 4.19 [xsl:output]元素 157 4.19.1 指定输出文档的格式 158 4.19.2 输出xml声明 158 4.19.3 输出文档类型定义 159 4.19.4 输出...

    《Java Web开发与实战--Eclipse+Tomcat+Servlet+JSP整合应用》.(刘伟,张利国).[PDF].zip

    主要内容包括web应用程序运行原理、主流集成开发工具(eclipse/myeclipse)和运行环境(tomcat)的配置和使用、servlet、jsp、jdbc、jsp表达式语言(el)、servlet监听器和过滤器、定制标记库、jstl、mvc模式、dao...

    JSP + EJB + Servlet 实例

    使用原始的servlet操作熟悉EJB的实体管理。 本实例主要功能:实现对员工、角色、账号、部门的关系管理。 本实例的实体设计:部门-员工:一对多。员工-账号:一对一。账号-角色:一对一。 主要采用EJB进行会话管理。...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part54

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part54

    Jsp+Servlet+JavaBean+JDBC简单登录实例

    **JSP+Servlet+JavaBean+JDBC简单登录实例详解** 在Web开发中,构建一个用户登录系统是常见的需求。本实例将详细讲解如何利用JavaServer Pages (JSP)、Servlet、JavaBean以及Java Database Connectivity (JDBC) 来...

    jsp-api.jar和servlet-api.jar

    Servlet实例化、初始化、服务和销毁的过程,以及JSP转化为Servlet的过程。 3. **部署描述符** - web.xml文件是Web应用的部署描述符,定义了Servlet和JSP的相关配置,如Servlet映射、初始化参数等。 4. **EL...

    ASP excel导出/导入Access数据库(代码+实例下载)

    在提供的实例中,`readExcel.asp`可能包含实现Excel数据导入Access的代码,而`excel.mdb`是Access数据库文件,`excel.xls`可能是用来测试导出的Excel文件。要理解并运行这些示例,你需要一个支持ASP的Web服务器环境...

    JSP+Servlet+JavaBean实例(MVC)

    这是一个以JSP、servlet、JavaBean实现MVC三层架构的简单例子,使用XML作为数据库连接的配置文件。 使用环境:eclipse_3.2、myeclipse_5.1、jdk_6.0、tomcat_5.5、sql server 2005 &lt;br&gt;----------------------...

    ExtJS4+Accordion+SERVLET/STRUTS2+JSON+Ext.tree.Panel实例

    这个实例结合了多个技术,包括Accordion布局、Servlet、Struts2以及JSON数据交互,以及Ext.tree.Panel组件,以创建一个功能丰富的用户界面。 Accordion布局是ExtJS中的一个布局管理器,它允许在一个区域内组织多个...

    jakarta-servletapi-4-src.zip servlet源码

    在Servlet的生命周期中,`init()`方法在Servlet实例化后首次被调用,用于初始化Servlet;`service()`方法处理客户端请求;而`destroy()`方法在Servlet销毁前执行,用于释放资源。源码中,我们可以看到这些方法的具体...

    Ajax+Servlet 实例

    **Ajax+Servlet 实例** Ajax(Asynchronous JavaScript and XML)技术是现代Web开发中的关键组成部分,它允许在不刷新整个页面的情况下与服务器进行异步数据交互。Servlet是Java Web开发中的一个标准,用于处理和...

    计算机导论第5章办公软件应用素材和实例-excel实例-食品公司销售情况(结果).pdf

    计算机导论第5章办公软件应用素材和实例-excel实例-食品公司销售情况(结果)

    Excel-VBA宏编程实例源代码-数据的导入导出-自动导入文本文件.zip

    这个"Excel-VBA宏编程实例源代码-数据的导入导出-自动导入文本文件.zip"文件包专注于讲解如何利用VBA宏来实现数据的导入和导出,特别是从文本文件自动导入到Excel工作簿中的过程。以下是对这个主题的详细解释: 1. ...

    Ext Gantt + jsp + servlet 工程实例

    本工程实例是将Ext Gantt与Java Web技术,即jsp(JavaServer Pages)和servlet结合的示例项目。 1. **Ext Gantt详解**: - **组件化设计**:Ext Gantt遵循MVC(Model-View-Controller)架构,允许开发者独立地处理...

    Ext Gantt + jsp + servlet 工程实例(EXT 甘特图实例)

    在这个"Ext Gantt + jsp + servlet 工程实例"中,我们将探讨如何将Ext Gantt与Java后端技术,即JSP和Servlet相结合,构建一个完整的Web应用。 1. **Ext Gantt**: Ext Gantt是Ext JS组件库的一部分,提供了一套完整...

    jsp+servlet+mysql实例

    这个小实例将带你深入理解JSP(JavaServer Pages)、Servlet和MySQL数据库的集成应用,尤其适合初学者进行实战演练。本文将详细解析这个“jsp+servlet+mysql”的学生管理系统的核心知识点。 首先,JSP是Java的一种...

    jsp+servlet+sql server购物车实例

    【标题】"jsp+servlet+sql server购物车实例"是一个基于Web开发的电子商务应用程序,它展示了如何使用JavaServer Pages(JSP)、Servlet和Microsoft SQL Server数据库来实现一个基本的在线购物车功能。在这个实例中...

    servlet-api.jar和jsp-api.jar文件

    2. **ServletConfig接口**:每个Servlet实例都有一个ServletConfig对象,用于传递初始化参数给Servlet。 3. **HttpServletRequest和HttpServletResponse接口**:这些接口代表了来自客户端的HTTP请求和发送回客户端...

    基于JSP+Servlet+JavaBean实现的图书管理系统

    综上所述,基于JSP+Servlet+JavaBean的图书管理系统是一个典型的Web应用实例,它融合了前端展示、后端处理和数据存储等多个环节,为学习Java Web开发提供了实践平台。通过这个项目,开发者可以深入理解Web开发的基本...

Global site tag (gtag.js) - Google Analytics