所需的jar包:

代碼:
/**
*
* @param cell
* 一個單元格的對象
* @return 傳回該單元格相應的類型的值
*/
public static Object getRightTypeCell(Cell cell) {
Object object = null;
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING: {
object = cell.getStringCellValue();
break;
}
case Cell.CELL_TYPE_NUMERIC: {
if (HSSFDateUtil.isCellDateFormatted(cell)) {// 處理日期格式、時間格式
SimpleDateFormat sdf = null;
if (cell.getCellStyle().getDataFormat() == HSSFDataFormat
.getBuiltinFormat("h:mm")) {
sdf = new SimpleDateFormat("HH:mm");
} else {// 日期
sdf = new SimpleDateFormat("yyyy-MM-dd");
}
Date date = cell.getDateCellValue();
object = sdf.format(date);
} else {
object = cell.getNumericCellValue();
}
break;
}
case Cell.CELL_TYPE_FORMULA: {
cell.setCellType(Cell.CELL_TYPE_NUMERIC);
object = cell.getNumericCellValue();
break;
}
case Cell.CELL_TYPE_BLANK: {
object = cell.getStringCellValue();
break;
}
}
return object;
}
/**
* 讀取出filePath中的所有資料資訊
*
* @param filePath
* excel檔案的絕對路徑
*
*/
@SuppressWarnings("deprecation")
public static void getDataFromExcel(String filePath) {
// 判斷是否為excel類型檔案
if (!filePath.endsWith(".xls") && !filePath.endsWith(".xlsx")) {
System.out.println("檔案不是excel類型");
}
FileInputStream fis = null;
Workbook wookbook = null;
int flag = 0;
try {
// 擷取一個絕對位址的流
fis = new FileInputStream(filePath);
} catch (Exception e) {
e.printStackTrace();
}
try {
// 2003版本的excel,用.xls結尾
wookbook = new HSSFWorkbook(fis);// 得到工作簿
} catch (Exception ex) {
try {
// 2007版本的excel,用.xlsx結尾
wookbook = new XSSFWorkbook(filePath);// 得到工作簿
} catch (IOException e) {
e.printStackTrace();
}
}
// 得到一個工作表
Sheet sheet = wookbook.getSheetAt(0);
// 獲得表頭
Row rowHead = sheet.getRow(0);
// 根據不同的data放置不同的表頭
Map<Object, Integer> headMap = new HashMap<Object, Integer>();
try {
// ----------------這裡根據你的表格有多少列
while (flag < rowHead.getPhysicalNumberOfCells()) {
Cell cell = rowHead.getCell(flag);
if (getRightTypeCell(cell).toString().equals("學号")) {
headMap.put("id", flag);
}
if (getRightTypeCell(cell).toString().equals("姓名")) {
headMap.put("name", flag);
}
if (getRightTypeCell(cell).toString().equals("生日")) {
headMap.put("date", flag);
}
flag++;
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("表頭不合規範,請修改後重新導入");
}
// 獲得資料的總行數
int totalRowNum = sheet.getLastRowNum();
if (0 == totalRowNum) {
System.out.println("Excel内沒有資料!");
}
Cell cell_1 = null, cell_2 = null, cell_3 = null;
// 獲得所有資料
for (int i = 1; i <= totalRowNum; i++) {
// 獲得第i行對象
Row row = sheet.getRow(i);
try {
cell_1 = row.getCell(headMap.get("id"));
cell_2 = row.getCell(headMap.get("name"));
cell_3 = row.getCell(headMap.get("date"));
} catch (Exception e) {
e.printStackTrace();
System.out.println("擷取單元格錯誤");
}
try {
double temp = (Double) getRightTypeCell(cell_1);
int id = (int) temp;
String name = (String) getRightTypeCell(cell_2);
String date = (String) getRightTypeCell(cell_3);
System.out.println("id:" + id + " name:" + name + " date:"
+ date);
} catch (ClassCastException e) {
e.printStackTrace();
System.out.println("資料不全是數字或全部是文字!");
}
}
}
public static void main(String[] args) {
getDataFromExcel("F:" + File.separator + "test.xlsx");
}