java jxl解析Excel(fileUpload)

需要的jar包:commons-io-1.3.2.jar,  jxl.jar,  commons-fileupload-1.2.1.jar,  commons-logging-1.1.jar

Action数据处理:

public class ExtractExcelAction extends ActionSupport implements ServletRequestAware{
 
 private HttpServletRequest request;
 private File theExcel;
 
 private Log logger = LogFactory.getLog(this.getClass());
 private static final String SESSION_IMPORT_Content = "import.excel";
 
 public File getTheExcel() {
  return theExcel;
 }

 public void setTheExcel(File theExcel) {
  this.theExcel = theExcel;
 }

 public void setServletRequest(HttpServletRequest request) {
  this.request = request;
 }
 
 public String test() throws Exception{
  
     InputStream stream = new FileInputStream(theExcel);//struts2方法
     //InputStream stream = new FileInputStream(new File("D:\\Study\\test.xls"));--本地文件

   //以下代码段为servlet和struts1.处理方式

  //ServletFileUpload upload = new ServletFileUpload();
  //FileItemIterator iter = upload.getItemIterator(request);
  //while (iter.hasNext()) {
  //  FileItemStream item = iter.next();
  //  String name = item.getFieldName();
  //  InputStream stream = item.openStream();

  //if(logger.isDebugEnabled()){
     //    logger.debug("成功读取文件["+item.getFieldName()+"]");
    // }


     if(logger.isDebugEnabled()){
         logger.debug("成功读取文件["+theExcel.getName()+"]");
     }
     //解析excel文件
     ExtractExcelData extractExcel = new ExtractExcelData();
     extractExcel.extract(stream);
     request.getSession().setAttribute(SESSION_IMPORT_Content, extractExcel);
     request.setAttribute("fileName", theExcel.getName().substring(theExcel.getName().lastIndexOf(File.separator) + 1));
     //excel的表头
     request.setAttribute("excelFields", extractExcel.getHeaders());
     return "success";

 }

 }

解析Excel类:ExtractExcelData.java(不同情况可做不同的数据结构)

public class ExtractExcelData {
	private Log log = LogFactory.getLog(ExtractExcelData.class);
	/** 提取excel的表头 */
	private String[] headers = new String[0];
	/** 提取excel的数据列表,元素类型为List,显示顺序与表头一致*/
	private List data = new ArrayList();

	public List getData() {
		return data;
	}

	public String[] getHeaders() {
		return headers;
	}
	
	public void extract(InputStream in){
		Workbook workbook = null;
		try {
	        workbook = Workbook.getWorkbook(in);
	        Sheet sheet = workbook.getSheet(0);
	        
	        if (log.isDebugEnabled()) {
	            log.debug("取得第一个 sheet=[" + sheet + "]");
	        }
	        
	        int rowCount = sheet.getRows();
	        
	        if (log.isDebugEnabled()) {
	            log.debug("在EXCEL共取到[" + rowCount + "]行数据");
	        }
	        
	        if (rowCount > 0) {
	            createTableHeader(sheet.getRow(0));
	            for (int i = 1; i < rowCount; i++) {
	                createTableRow(sheet.getRow(i));
	            }
	        }
	        
	        if (log.isInfoEnabled()) {
	        	log.info("完成读取EXCEL文件");
	        }
	    } catch (Exception e) {
	        String msg = "创建 Workbook 错误";
	        if (log.isInfoEnabled()) {
	            log.info(msg, e);
	        }
	        
	        //throw new ImportExportException(msg, e);
	    }
	}
	
    private void createTableHeader(Cell[] cells) {
        if (cells != null) {
            if (log.isInfoEnabled()) {
                log.info("设置表头时共找到[" + cells.length + "]列cell");
            }
            
            headers = new String[cells.length];
            for (int i = 0; i < cells.length; i++) {
                headers[i] = cells[i].getContents();
            }
        }
    }
	
    private void createTableRow(Cell[] cells) {
        if (cells != null && cells.length > 0) {
        	List elementList = new ArrayList();
            for (int i = 0; i < headers.length; i++) {
                String value = "";
                if (i < cells.length && cells[i] != null) {
                    value = cells[i].getContents();
                    if(StringUtils.isNotBlank(value)){
                    	value = value.trim();
                    }
                }
                elementList.add(value);
            }
            if (log.isInfoEnabled()) {
                log.info("数据行:" + elementList);
            }
            data.add(elementList);
        }
    }
}

页面: 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>测试</title>

<script type="text/javascript">
	function doNext(){
		var formatstring = 'xls';
		var filePath= document.getElementById("theExcel").value;
		var i = filePath.lastIndexOf(".");
		newstring= filePath.substring(i+1);
		if(formatstring == newstring){
			document.getElementById("importForm").submit();
		}else{
			alert("对不起,文件格式与选择的文件不相符!");
		}
	}
</script>
</head>
<body>
 	<form id="importForm" action="user/extractExcel_test" enctype="multipart/form-data" method="post" >
		请选择要输入的excel文件:<input id="theExcel" name="theExcel" type="file" value =""/> 
		<input type="button" onclick="doNext();" value="解析"/>
	</form>
</body>
</html>

 

 

 

posted on 2012-09-19 10:53  Panda_Luffy  阅读(1450)  评论(0编辑  收藏  举报

导航