全面清晰!java Excel导入数据库

主函数:

	public static void main(String[] args) {
		//创建工作簿——核心功能
        Workbook workBook = ExcelUtils.getWorkBook(file);
        //获取Excel的 Sheet页
		Sheet sheet = workBook.getSheet("Sheet1"); //根据页明获取
		//Sheet sheet = workBook.getSheetAt(0)  获取第0页
		
		logger.info("表中导入行数: "+sheet.getLastRowNum());
		//从第一行到最后一行 循环处理(此处获取的第一行从 0 开始计数)
		for (int i = sheet.getFirstRowNum(); i <= sheet.getLastRowNum(); i++) {
		  Row row = sheet.getRow(i);
		  if (row ==null ) {
		    continue;
		  }
		  //从该行的第一列到最后一列 循环处理
//        for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
//            if(row.getCell(j).equals(" ")){
//                continue;
//            }
//            Cell cell = row.getCell(j);
//            System.out.println("cell: "+getCellValue(cell));
//        }

		  //非循环处理 逐个单元格处理
		  Cell cell1 = row.getCell(0); //获取该行的第一列(注意此处还不是值)
		  Cell cell2 = row.getCell(0); //获取该行的第二列(注意此处还不是值)
		  //获取单元格的值,并做类型转换处理
		  getCellValue(cell1);
		  getCellValue(cell2);
		  
		  //存入数据库
		  
		}
    }
	

工具方法:

import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

	/**
     * 创建工作簿
     * @param file
     * @return
     * @throws IOException
     */
    public static  Workbook getWorkBook(File file) throws  IOException{
        //获取文件名字
        String fileName=file.getName();
        // 创建工作簿
        Workbook workbook=null;
        try {
            //获取Excel的IO流
            InputStream inputStream=new FileInputStream(file);
            //这是2007版的Excel
            if(fileName.endsWith("xlsx")){
                workbook=new XSSFWorkbook(inputStream);
            }
        }catch (Exception e){
            System.out.println(e.getMessage());
        }
        return  workbook;

    }

	/**
     * 获取单元格数据——类型转换
     * 从Excel中获取的数据类型一共分五种,除数值类型外其它均可直接当作字符串接收(最后附上逐个类型处理示例)
     * 数值类型如需转字符串需单独处理,另外有些日期会被当成数值类型,也需单独处理
     */
    public static String getCellValue(Cell cell){
        String cellValue="";
        try {
            if(cell==null){
                return  cellValue;
            }
            int cellType=cell.getCellType();
            if(cellType==0){
            	//如果为时间格式的内容
                if (HSSFDateUtil.isCellDateFormatted(cell)) { 
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    cellValue=sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())).toString();
                }else {  //普通数值类型
                    cellValue= String.valueOf((long)cell.getNumericCellValue()) ;
                }
            }
            else {
                cellValue=String.valueOf(cell.getStringCellValue().trim());
            }
        }
        catch (Exception e){
            e.printStackTrace();
        }
        return  cellValue;
    }

单元格数据逐个类型处理示例:

	/**
    * 获取单元格数据——五种类型处理
     */
	public  String getCellValue(Cell cell){
    String cellValue="";
    switch (cell.getCellType()) {
        case 0:   // 数值类型  HSSFCell.CELL_TYPE_NUMERIC
            //如果为时间格式的内容
            if (HSSFDateUtil.isCellDateFormatted(cell)) {
                //注:format格式 yyyy-MM-dd hh:mm:ss 中小时为12小时制,若要24小时制,则把小h变为H即可,yyyy-MM-dd HH:mm:ss
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                cellValue=sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())).toString();
                break;
            } else {
                cellValue= String.valueOf(cell.getNumericCellValue()) ;
            }
            break;
        case 1:   // 字符串  HSSFCell.CELL_TYPE_STRING
            cellValue = cell.getStringCellValue();
            break;
        case 2:   // 公式  HSSFCell.CELL_TYPE_FORMULA
            cellValue= String.valueOf(cell.getNumericCellValue()) ;
            break;
        case 3:   // 空值  HSSFCell.CELL_TYPE_BLANK
            cellValue = "";
            break;
        case 4:   // Boolean  HSSFCell.CELL_TYPE_BOOLEAN
            cellValue = cell.getBooleanCellValue() + "";
            break;
        case 5:   // 错误  HSSFCell.CELL_TYPE_ERROR
            cellValue = "";
            break;
        default:
            cellValue = "";
            break;
    }
    return cellValue;
}

你可能感兴趣的:(java编程)