使用java讀取Excel表格中的數據 ,解決方案蒐集

Java EXCEL API簡介 
Java Excel是一開放源碼項目,經過它Java開發人員能夠讀取Excel文件的內容、建立新的Excel文件、更新已經存在的Excel文件。使用該API非Windows操做系統也能夠經過純Java應用來處理Excel數據表。由於是使用Java編寫的,因此咱們在Web應用中能夠經過JSP、Servlet來調用API實現對Excel數據表的訪問。html

應用示例 
從Excel文件讀取數據表 

Java Excel API既能夠從本地文件系統的一個文件(.xls),也能夠從輸入流中讀取Excel數據表。讀取Excel數據表的第一步是建立Workbook(術語:工做薄),下面的代碼片斷舉例說明了應該如何操做:  須要用到一個開源的jar包,jxl.jar。   下載地址java

File file = new File("c:\\a.xls");  
InputStream in = new FileInputStream(file);  
Workbook workbook = Workbook.getWorkbook(in);  
//獲取第一張Sheet表  
Sheet sheet = workbook.getSheet(0);  
  
//咱們既可能經過Sheet的名稱來訪問它,也能夠經過下標來訪問它。若是經過下標來訪問的話,要注意的一點是下標從0開始,就像數組同樣。  
//獲取第一行,第一列的值   
Cell c00 = rs.getCell(0, 0);   
String strc00 = c00.getContents();   
//獲取第一行,第二列的值   
Cell c10 = rs.getCell(1, 0);   
String strc10 = c10.getContents();   
//咱們能夠經過指定行和列獲得指定的單元格Cell對象  
  Cell cell = sheet.getCell(column, row);  
  //也能夠獲得某一行或者某一列的全部單元格Cell對象  
  Cell[] cells = sheet.getColumn(column);  
  Cell[] cells2 = sheet.getRow(row);  
  //而後再取每個Cell中的值  
  String content = cell.getContents();

這個jar包中還有不少其餘的方法,就須要本身去摸索了。apache

 

===========================================如下爲本身調試後的代碼數組

1.如圖,添加jxl.jar文件ide

建立excelReader類post

package excelReader;

import java.io.*;
import jxl.*;
import jxl.read.biff.BiffException;

public class ExcelReader {
	String path = "C:\\data.xlsx";
	public ExcelReader(String path){
		this.path = path;
	}
	
	public String readExcel(int sheetNum,int col,int row) throws BiffException, IOException{
		File file = new File(path);  
		InputStream in = new FileInputStream(file);  
		Workbook workbook = Workbook.getWorkbook(in);  
		//獲取第一張Sheet表  
		Sheet sheet = workbook.getSheet(sheetNum);  
		//咱們既可能經過Sheet的名稱來訪問它,也能夠經過下標來訪問它。若是經過下標來訪問的話,要注意的一點是下標從0開始,就像數組同樣。  
		//獲取第一行,第一列的值   
		Cell celV = sheet.getCell(col, row);   
		String strv = celV.getContents();   
		return strv;
	}
	
	public String getValue(int sheetNum,int col,int row) throws BiffException, IOException{
		return readExcel(sheetNum,col,row);
	}
	
}

 

建立Test類測試

import java.io.IOException;
import jxl.read.biff.BiffException;
import com.sun.org.apache.bcel.internal.generic.NEW;
import excelReader.*;


public class Test {
	public static void main(String[] args) throws BiffException, IOException {
		System.out.println(new ExcelReader("C:\\jxlrwtest.xls").getValue(0, 1, 13));//sheet,col,row
	}
}

 

===============================================================================ui

最近作自動化須要從文件讀取數據作參數化,網上發現一個不錯的解決方案。this

準備:新建一個excel文件,文件名爲測試類名,sheet名爲測試方法名操作系統

        excel第一行爲標題,從第二行開始爲測試數據

        build path:jxl.jar

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.testng.Assert;

import jxl.*;

/**
 * Excel放在Data文件夾下</p>
 * Excel命名方式:測試類名.xls</p>
 * Excel的sheet命名方式:測試方法名</p>
 * Excel第一行爲Map鍵值</p>
 * 代碼參考鄭鴻志的Blog
 * {@link www.zhenghongzhi.cn/post/42.html}
 * @ClassName: ExcelDataProvider
 * @Description: TODO(讀取Excel數據)
 */
public class ExcelDataProvider implements Iterator<Object[]> {

    private Workbook book         = null;
    private Sheet    sheet        = null;
    private int      rowNum       = 0;
    private int      currentRowNo = 0;
    private int      columnNum    = 0;
    private String[] columnnName;

    public ExcelDataProvider(String classname, String methodname) {

        try {

            int dotNum = classname.indexOf(".");

            if (dotNum > 0) {
                classname = classname.substring(classname.lastIndexOf(".") + 1,
                        classname.length());
            }
            //從/data文件夾下讀取以類名命名的excel文件
            String path = "data/" + classname + ".xls";
            InputStream inputStream = new FileInputStream(path);

            book = Workbook.getWorkbook(inputStream);
            //取sheet
            sheet = book.getSheet(methodname);
            rowNum = sheet.getRows();
            Cell[] cell = sheet.getRow(0);
            columnNum = cell.length;
            columnnName = new String[cell.length];

            for (int i = 0; i < cell.length; i++) {
                columnnName[i] = cell[i].getContents().toString();
            }
            this.currentRowNo++;

        } catch (Exception e) {
            e.printStackTrace();
            Assert.fail("unable to read Excel data");
        }
    }

    public boolean hasNext() {

        if (this.rowNum == 0 || this.currentRowNo >= this.rowNum) {

            try {
                book.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return false;
        } else {
            // sheet下一行內容爲空斷定結束
            if ((sheet.getRow(currentRowNo))[0].getContents().equals(""))
                return false;
            return true;
        }
    }

    public Object[] next() {

        Cell[] c = sheet.getRow(this.currentRowNo);
        Map<String, String> data = new HashMap<String, String>();
        // List<String> list = new ArrayList<String>();

        for (int i = 0; i < this.columnNum; i++) {

            String temp = "";

            try {
                temp = c[i].getContents().toString();
            } catch (ArrayIndexOutOfBoundsException ex) {
                temp = "";
            }

            // if(temp != null&& !temp.equals(""))
            // list.add(temp);
            data.put(this.columnnName[i], temp);
        }
        Object object[] = new Object[1];
        object[0] = data;
        this.currentRowNo++;
        return object;
    }

    public void remove() {
        throw new UnsupportedOperationException("remove unsupported.");
    }
}
相關文章
相關標籤/搜索