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."); } }