zoukankan      html  css  js  c++  java
  • 导入excel数据到数据库

    1.上传excel到服务器

    jsp页面代码

    <form action="actionname" method="post" id="form1" enctype="multipart/form-data">
    
    <input type="file" name="excel" id="fileExecl" class="inputFile" onchange="uploadFile(this)" size="1" title=""/>
    <input type="button" value="导入excel" onclick="importExcel()">
    
    <form>

    js代码

    function importExcel() { 
    var fileExecl = document.getElementById("fileExecl").value;
    if(fileExecl==null||fileExecl==""){
    alert("请选择excel文件");
    return false;
    }
    document.getElementById("action").value="importExcel";
    document.getElementById("form1").submit();
    
    }
    
    function uploadFile(importObj) {
    var path = importObj.value;
    var type = path.substring(path.lastIndexOf(".") + 1, path.length).toLowerCase();
    if (type != "xlsx"&&type != "xls") {
    alert("请上传xlsx或xls后缀的Excel");
    importObj.value = "";
    } else {
    document.getElementById("action").value="importExcel";
    }
    }
    

      

    action代码

    private File excel;//上传的文件
    private String excelFileName; // File属性名 + FileName固定的
    
    
    
    
    private File uploadFile() {
    		InputStream is = null;
    		OutputStream os = null;
    		try {
    			is = new FileInputStream(excel);
    			String uploadPath = this.getServletContext().getRealPath("/staticFiles");
    			//分解路径
    			//String filePath = getFileDirectory(uploadPath);
    			File destFile = new File(uploadPath, excelFileName);
    			os = new FileOutputStream(destFile);
    			byte[] buffer = new byte[400];
    			int length = 0;
    			while ((length = is.read(buffer)) > 0) {
    				os.write(buffer, 0, length);
    			}
    			is.close();
    			os.close();
    			return destFile;
    		} catch (FileNotFoundException e) {
    			logger.error(e, e);
    		} catch (IOException e) {
    			logger.error(e, e);
    		}
    		return null;
    	}
    
    
    
    
    public String importExcel() {
    		
    		//文件上传路径
    		File file = uploadFile();
    		String filePath = file.getPath();
    		//获取导出数据
    		ImportExcel importExcel = new ImportExcel();
    		List<String[]> importList = importExcel.getImportList(filePath);
    		//删除上传文件
    		if(file.isFile() && file.exists()) {
    			file.delete();
    		}
    		for (int i = 1; i < importList.size(); i++) {
    			String[] rowData = importList.get(i);
        //rowData[0] excel中第一列数据
                    }
        				
    		
    		return null;
    	}    
    

    解析excel代码  xls和xlsx两种格式,代码可以优化

    public class ImportExcel {
    	/**
    	 * 
    	 * @param filePath 文件路径
    	 * @return excel中一行数据储存在一个数组String[]
    	 */
    	public List<String[]> getImportList(String filePath) {
    		List<String[]> rowsData = new ArrayList<String[]>();;
    		if(filePath.endsWith("xls")){ 
    			try {
    				boolean importData = false;
    				HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(filePath)); 
    				HSSFSheet sheet = hwb.getSheetAt(0); 
    				int rows = sheet.getPhysicalNumberOfRows();// 获取表格的行数
    				for (int r = 0; r < rows; r++) { // 循环遍历表格的行
    					importData = false;
    					String cellValue = "";
    					HSSFRow row = sheet.getRow(r); 
    					if (row != null) {
    						int cells =row.getLastCellNum();
    						String[] rowData = new String[cells];
    						for (int c = row.getFirstCellNum(); c < cells; c++) {
    							HSSFCell cell = row.getCell(c); 
    							if (cell != null) {
    								if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) { // 判断单元格的值是否为字符串类型
    									cellValue = cell.getStringCellValue();
    								} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { // 判断单元格的值是否为数字类型
    									cellValue = cell.getNumericCellValue() + "";
    								} else if (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) { // 判断单元格的值是否为布尔类型
    									cellValue = cell.getStringCellValue();
    								} else {
    									cellValue = "";
    								}
    							}
    							if (cellValue.trim().length() > 0) {
    								importData = true;
    							}
    							rowData[c] = cellValue;
    						}
    						//数据全为空,不导入
    						if (r > 0 && !importData) {
    							continue;
    						}
    						rowsData.add(rowData);
    					}
    				}
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}else if(filePath.endsWith("xlsx")){ 
    			try {
    			boolean importData = false;
    			XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(
    					filePath)); // 创建对Excel工作簿文件的引用
    			XSSFSheet sheet = workbook.getSheetAt(0); // 创建对第一个工作表的引用,多个工作表暂未实现
    			int rows = sheet.getPhysicalNumberOfRows();// 获取表格的行数
    			for (int r = 0; r < rows; r++) { // 循环遍历表格的行
    				importData = false;
    				String cellValue = "";
    				XSSFRow row = sheet.getRow(r); // 获取单元格中指定的行对象
    				if (row != null) {
    					int cells = row.getPhysicalNumberOfCells();// 获取单元格中指定列对象
    					String[] rowData = new String[cells];
    					for (short c = 0; c < cells; c++) { // 循环遍历单元格中的列
    						XSSFCell cell = row.getCell((short) c); // 获取指定单元格中的列
    						if (cell != null) {
    							if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) { // 判断单元格的值是否为字符串类型
    								cellValue = cell.getStringCellValue();
    							} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { // 判断单元格的值是否为数字类型
    								cellValue = cell.getNumericCellValue() + "";
    							} else if (cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) { // 判断单元格的值是否为布尔类型
    								cellValue = cell.getStringCellValue();
    							} else {
    								cellValue = "";
    							}
    						}
    						if (cellValue.trim().length() > 0) {
    							importData = true;
    						}
    						rowData[c] = cellValue;
    					}
    					//数据全为空,不导入
    					if (r > 0 && !importData) {
    						continue;
    					}
    					rowsData.add(rowData);
    				}
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		}
    		return rowsData;
    	}
    
    }
    

      

     

  • 相关阅读:
    [ 转载 ] Java基础4--Java中的static关键字解析
    [ 原创 ]新手作品-我的第一款安卓自学作品---YY音乐诞生了
    [ 转载 ]学习笔记-svn用法详解
    [ 原创 ]学习笔记-Android 学习笔记 Contacts (一)ContentResolver query 参数详解 [转载]
    [ 原创 ]学习笔记-Android 中关于Cursor类的介绍
    《JavaScript DOM 编程艺术 第 2 版》
    test-ra
    2019-4-22
    《写给大家看的设计书》
    2018-5
  • 原文地址:https://www.cnblogs.com/Nbge/p/4314947.html
Copyright © 2011-2022 走看看