@author YHC
使用Java1.5 foreach 循環迭代遍歷所有行和單元格
有時候你僅僅隻想迭代遍歷工作薄中的所有行(Row),或者行中所有的單元格,如果你使用的是Java5或者是更高版本,這個非常容易取得進行遍歷
因為它將允許一種新的foreach循環支持工作.非常幸運,它很簡單,Sheet和Row都實現瞭 java.lang.Iterable接口支持foreach,對於行(Row)
而言,允許訪問CellIterator內部類來支持迭代所有單元格,對於工作薄(Sheet)提供瞭 rowIterator()進行迭代所有的行
[java]
//根據Workbook得到第個0下標的工作薄對象
Sheet sheet = wb.getSheetAt(0);
//遍歷該工作薄中所有的行
for (Row row : sheet) {
//遍歷一行中的所有的單元格
for (Cell cell : row) {
// 你需要實現功能的代碼
}
}
//根據Workbook得到第個0下標的工作薄對象
Sheet sheet = wb.getSheetAt(0);
//遍歷該工作薄中所有的行
for (Row row : sheet) {
//遍歷一行中的所有的單元格
for (Cell cell : row) {
// 你需要實現功能的代碼
}
}
獲得單元格內容
得到一個單元格中的內容,你首先需要知道單元格是什麼類型,(請求一個string類型的單元格,如果他的內容是數字類型,那麼將拋出此異常NumberFormatException 例如),你會想去轉換單元格的類型,然後調用適當的getter方法得到單元格.
在以下代碼,,我們將遍歷一個工作薄中的所有的單元格,通過CellReference轉換輸出,然後輸出Cell的內容;
// import org.apache.poi.ss.usermodel.* //記得導入這個包
[java]
//創建文件
File file=new File("D:/workbook.xls");
//初始化輸入流
FileInputStream is = new FileInputStream(file);
//創建Excel,並指定Excel讀取位置
Workbook wb=new HSSFWorkbook(is);
//根據Workbook得到第0個下標的工作薄
Sheet sheet1 = wb.getSheetAt(0);
//遍歷工作薄中的所有行,註意該foreach隻有Java5或者以上才支持
for (Row row : sheet1) {
//遍歷行中的所有單元格 Java5+ 才能使用
for (Cell cell : row) {
//單元格的參照 ,根據行和列確定某一個單元格的位置
CellReference cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex());
//打印單元格的位置
System.out.print(cellRef.formatAsString());
//輸出分隔符
System.out.print(" – ");
//得到單元格類型
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING://String類型單元格
//輸出文本
System.out.println(cell.getRichStringCellValue().getString());
break;
case Cell.CELL_TYPE_NUMERIC://數字類型
//檢查單元格是否包含一個Date類型
//僅僅隻檢查Excel內部的日期格式,
if (DateUtil.isCellDateFormatted(cell)) {
//輸出日期
System.out.println(cell.getDateCellValue());
} else {
//輸出數字
System.out.println(cell.getNumericCellValue());
}
break;
case Cell.CELL_TYPE_BOOLEAN://Boolean類型
System.out.println(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_FORMULA://公式
//輸出公式
System.out.println(cell.getCellFormula());
break;
default:
System.out.println();
}
}
}
//創建文件 www.aiwalls.com
File file=new File("D:/workbook.xls");
//初始化輸入流
FileInputStream is = new FileInputStream(file);
//創建Excel,並指定Excel讀取位置
Workbook wb=new HSSFWorkbook(is);
//根據Workbook得到第0個下標的工作薄
Sheet sheet1 = wb.getSheetAt(0);
//遍歷工作薄中的所有行,註意該foreach隻有Java5或者以上才支持
for (Row row : sheet1) {
//遍歷行中的所有單元格 Java5+ 才能使用
for (Cell cell : row) {
//單元格的參照 ,根據行和列確定某一個單元格的位置
CellReference cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex());
//打印單元格的位置
System.out.print(cellRef.formatAsString());
//輸出分隔符
System.out.print(" – ");
//得到單元格類型
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING://String類型單元格
//輸出文本
System.out.println(cell.getRichStringCellValue().getString());
break;
case Cell.CELL_TYPE_NUMERIC://數字類型
//檢查單元格是否包含一個Date類型
//僅僅隻檢查Excel內部的日期格式,
if (DateUtil.isCellDateFormatted(cell)) {
//輸出日期
System.out.println(cell.getDateCellValue());
} else {
//輸出數字
System.out.println(cell.getNumericCellValue());
}
break;
case Cell.CELL_TYPE_BOOLEAN://Boolean類型
System.out.println(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_FORMULA://公式
//輸出公式
System.out.println(cell.getCellFormula());
break;
default:
System.out.println();
}
}
}
Excel內容如下圖:創建該文件是用的POI Excel 02 中的click me!!!,想看創建點該超鏈接!
讀取該文件以及與運行該代碼結果對比:
作者:yhc13429826359