Java 讀取excel文件內容插入到數據庫

 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文件內容插入到數據庫的方法,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果對你有用 點贊評論收藏 加關注^_^   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章