Excel文件在工作中運行非常多,有時候需要我們結合數據讀取和寫出相應的數據,在這裏寫一個簡單的demo方便以後的調用和學習:
讀取文件部分:
首先,導入相應的JAR包
1、dom4j-1.6.1.jar (一定要導入該包,不然POI解析的時候會報錯)
2、poi-3.8-20120326.jar
3、poi-ooxml-3.8-20120326.jar
4、poi-ooxml-schemas-3.8-20120326.jar
5、xmlbeans-2.3.0.jar
其次,代碼部分
1、功能代碼
public class ImportExcel {
/**
* 根據文件路徑獲取Excel中的數據
*
* @param FilePath 文件路徑
* @param num 表頭的數量(也就是多少列)
*
*/
public static void getDataFromExcel(String FilePath , int num) {
// 判斷是否是excel文件
if (!FilePath.endsWith(".xls") && !FilePath.endsWith(".xlsx")) {
System.out.println("導入的文件不是Excel文件類型!");
}
FileInputStream fis = null;
Workbook workbook = null;
// 構建一個輸入流
try {
fis = new FileInputStream(FilePath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
if (FilePath.endsWith(".xls")) {
// 獲取2003版的EXCEL文件
workbook = new HSSFWorkbook(fis);
} else {
// 獲取2007版的EXCEL文件
workbook = new XSSFWorkbook(fis);
}
} catch (IOException e) {
e.printStackTrace();
}
// 獲取一個EXCEL工作表
Sheet sheet = workbook.getSheetAt(0);
// 獲取工作表表頭
Row rowHead = sheet.getRow(0);
// 判斷表頭是否正確
if (rowHead.getPhysicalNumberOfCells() != num) {
System.out.println("表頭數據不正確");
} else {
// 獲取數據的總行數
int rowNum = sheet.getLastRowNum();
// 獲取到的屬性
String name = null;
int age = 0;
// 獲取EXCEL表中的所有數據
for (int i = 1; i <= rowNum; i++) {
// 獲取第i行的數據
Row row = sheet.getRow(i);
// 獲取第i行的第0列的數據
Cell cell = row.getCell((short) 0);
name = cell.getStringCellValue().toString();
// 獲取第i行的第1列的數據
cell = row.getCell((short) 1);
age = (int) cell.getNumericCellValue();
System.out.println("name:" + name + "age:" + age);
}
}
}
}
2、測試代碼
public class Test {
public static void main(String[] args) {
String FilePath = "D:/studentInfo.xlsx";
ImportExcel.getDataFromExcel(FilePath,2);
}
}
3、Excel中的數據
name | age |
張三 | 21 |
李四 | 22 |
王五 | 23 |
趙六 | 21 |
4、輸出情況
name:張三 age:21
name:李四 age:22
name:王五 age:23
name:趙六 age:21
最後,讀取部分總結:
1、由於excel版本的不同,主要是2003和2007後綴的問題,解析的類也不一樣,
xls 版本解析類:workbook = new HSSFWorkbook(fis);
xlsx 版本解析類:workbook = new XSSFWorkbook(fis);
所以一定要判斷是哪種後綴,不然會報錯
2、在讀取數據的循環當中,注意數據類型,比如有列名,從第一行開始循環的話,因爲有age不能轉換成int類型,所以會報錯。