导入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;
	}

}

  

 

原文地址:https://www.cnblogs.com/Nbge/p/4314947.html