Java读写Excel的包是Apache POI。

JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为它是使用Java编写的,所以我们在Web应用中可以通过JSP、Servlet来调用API实现对Excel数据表的访问。下面是一个全部代码后面是分步解析

package com.myFirstSpring.test; 
import org.apache.poi.ss.usermodel.*;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.sun.org.apache.bcel.internal.generic.RET;

import java.io.File;
import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/** 
 * @author tqf
 * @version 创建时间:2020-4-7 下午4:10:18 
 * 类说明:读取excel文件内容
 */

public class ReadExcel {
    public static void main(String[] args) {
	readExcel("D:\\测试生成Excel文件\\withoutHead2.xls");
    //readExcel2();
 }
    public static void readExcel(String path) {
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	File file = new File(path);
	FileInputStream fis = null;
	Workbook workBook = null;
	if (file.exists()) {
	    try {
		fis = new FileInputStream(file);
		workBook = WorkbookFactory.create(fis);
		int numberOfSheets = workBook.getNumberOfSheets(); //获取有几个sheet
		List<read_excel>list = new ArrayList<>();
		// sheet工作表
		for (int s = 0; s <numberOfSheets ; s++) { //numberOfSheets
		    Sheet sheetAt = workBook.getSheetAt(s);
		    //获取工作表名称
		    String sheetName = sheetAt.getSheetName();
		    System.out.println("工作表名称:" + sheetName);
		    // 获取当前Sheet的总行数
		    int rowsOfSheet = sheetAt.getPhysicalNumberOfRows();
		    System.out.println("当前表格的总行数:" + rowsOfSheet);
		    // 第一行
		    Row row0 = sheetAt.getRow(0);
		    int physicalNumberOfCells = sheetAt.getRow(0).getPhysicalNumberOfCells();
		    String[] title = new String[physicalNumberOfCells];
		    for (int i = 0; i < physicalNumberOfCells; i++) {
		        title[i] = row0.getCell(i).getStringCellValue();
		        System.out.print(title[i] + "  ");    
		    }
		    System.out.println();
		    for (int r = 1; r < rowsOfSheet; r++) {
		        Row row = sheetAt.getRow(r);//获取的第几行数据
		        int cellCount = row.getPhysicalNumberOfCells(); //获取总列数  
                //遍历每一列  
		        read_excel excel = new read_excel();
                for (int c = 0; c < cellCount; c++) {  
                    Cell cell = row.getCell(c);  
                    int cellType = cell.getCellType();  
                    String cellValue = null;  
                    switch(cellType) {  
                        case Cell.CELL_TYPE_STRING: //文本  
                            cellValue = cell.getStringCellValue();  
                            break;  
                        case Cell.CELL_TYPE_NUMERIC: //数字、日期  
                            if(DateUtil.isCellDateFormatted(cell)) {  
                                cellValue = sdf.format(cell.getDateCellValue()); //日期型  
                            }  
                            else {  
                                cellValue = String.valueOf(cell.getNumericCellValue()); //数字  
                            }  
                            break;  
                        case Cell.CELL_TYPE_BOOLEAN: //布尔型  
                            cellValue = String.valueOf(cell.getBooleanCellValue());  
                            break;  
                        case Cell.CELL_TYPE_BLANK: //空白  
                            cellValue = cell.getStringCellValue();  
                            break;  
                        case Cell.CELL_TYPE_ERROR: //错误  
                            cellValue = "错误";  
                            break;  
                        case Cell.CELL_TYPE_FORMULA: //公式  
                            cellValue = "错误";  
                            break;  
                        default:  
                            cellValue = "错误";  
                    }  
                    if(cellValue == "" || "错误".equals(cellValue)){
                    	System.out.println("第" + r + "行,第"+c+"列[" + title[c] + "]数据错误!");
                    	return;
                    }
                    //下面是被获取到的数据存放在用户实体类 read_excel
                    switch (c) {
					case 0:
						excel.setId(cellValue);
						break;
					case 1:
						excel.setName(cellValue);
						break;
					case 2:
						excel.setAge(Integer.parseInt(cellValue));
						break;
					case 3:
						excel.setTime(cellValue);
						break;

					default:
						break;
					}
                    System.out.print(cellValue + "  ");    
                }  
                list.add(excel); //获取的数据存放在list 最后进行添加到数据库操作
                System.out.println();  
            }  
		    System.out.println();
		    }
	        
	        if (fis != null) {
		    fis.close();
	        }
	    } catch (Exception e) {
	        // TODO Auto-generated catch block
	        e.printStackTrace();
	    }
        } else {
	    System.out.println("文件不存在!");
        }
    }
    
    /** 
     * 读取Excel测试,兼容 Excel 2003/2007/2010 
     */  
    public static void readExcel2()  
    {  
        SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");  
        try {  
            //同时支持Excel 2003、2007  
            File excelFile = new File("D:\\测试生成Excel文件\\withoutHead2.xls"); //创建文件对象  
            FileInputStream is = new FileInputStream(excelFile); //文件流  
            Workbook workbook = WorkbookFactory.create(is); //这种方式 Excel 2003/2007/2010 都是可以处理的  
            int sheetCount = workbook.getNumberOfSheets();  //Sheet的数量  
            //遍历每个Sheet  
            for (int s = 0; s < sheetCount; s++) {  
                Sheet sheet = workbook.getSheetAt(s);  
                int rowCount = sheet.getPhysicalNumberOfRows(); //获取总行数  
                //遍历每一行  
                for (int r = 0; r < rowCount; r++) {  
                    Row row = sheet.getRow(r);  
                    int cellCount = row.getPhysicalNumberOfCells(); //获取总列数  
                    //遍历每一个单元格  
                    for (int c = 0; c < cellCount; c++) {  
                        Cell cell = row.getCell(c);  
                        int cellType = cell.getCellType();  
                        String cellValue = null;
                        
                        //在读取单元格内容前,设置所有单元格中内容都是字符串类型
                        cell.setCellType(Cell.CELL_TYPE_STRING);
                        
                        //按照字符串类型读取单元格内数据
                        cellValue = cell.getStringCellValue();
                        
                        /*在这里可以对每个单元格中的值进行二次操作转化*/
                        
                        System.out.print(cellValue + "    ");  
                    }  
                    System.out.println();  
                }  
            }  
      
        }  
        catch (Exception e) {  
            e.printStackTrace();  
        }  
      
         
    }
    
    public void stop(){
    	for (int i = 0;i<10;i++){
            for (int j = 0; j<10; j++)
            {
                System.out.println(j);
            	if (i<10){
                    System.out.println("retuen 跳出循环");
          			return;
                }
            }
        }
    }
}

 

1 、创建Workbook对象

//path是你要读取的excel文件路径 或者上传的excel文件
File file = new File(path);
FileInputStream fis = null;
Workbook workBook = null;
fis = new FileInputStream(file);
workBook = WorkbookFactory.create(fis);

2 、获取第一张表

int numberOfSheets = workBook.getNumberOfSheets(); //获取有几个sheet 遍历
for (int s = 0; s <numberOfSheets ; s++) { //numberOfSheets
	Sheet sheetAt = workBook.getSheetAt(s);
}

 3 、获取sheet表中的总行数

 //获取工作表名称
String sheetName = sheetAt.getSheetName();
ystem.out.println("工作表名称:" + sheetName);
// 获取当前Sheet的总行数
int rowsOfSheet = sheetAt.getPhysicalNumberOfRows();
System.out.println("当前表格的总行数:" + rowsOfSheet);

4 、获取sheet表中的总列数

for (int r = 1; r < rowsOfSheet; r++) {
    Row row = sheetAt.getRow(r);//获取的第几行数据
	int cellCount = row.getPhysicalNumberOfCells(); //获取总列数  
}

异常描述:在导入excel的时候在获取excel单元格数据的时候会出现Cannot get a text value from a numeric cell的异常抛出。
异常原因:poi读取excel单元格的数据,cell有不同的数据类型(CELL_TYPE_NUMERIC,CELL_TYPE_STRING,CELL_TYPE_FORMULA),如果cell中的数据是数值的话,如果你没有给他设置cell的类型的话。默认会认为是CELL_TYPE_NUMERICl类型,如果从一个NUMBER类型的Cell使用.cell.getStringCellValue()读取出一个字符串就会出错。
解决的方法:在读取数据之前,设置cell的类型为CELL_TYPE_STRING; cell.setCellType(Cell.CELL_TYPE_STRING);

好了以上写的关于读取excel文件内容插入到数据库的方法,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果对你有用 点赞评论收藏 加关注^_^   

更多推荐