本人在學習使用java的過程中,需要驗證一下excel表格裏面的數據是否與數據庫中的數據相等。由於數據太多,故想着用java讀取excel數據再去數據庫驗證。上網看了一下資料自己寫了一個讀取excel文檔的方法,驗證數據庫的方法暫時還沒寫,自娛自樂,只能抽時間了。現在把讀取excel的方法分享出來。
//讀取excel文檔,除第一行爲標題外內容爲數字
public static List<List<Map<String, String>>> readExcel(File filepath) throws Exception{
/*首先判斷文件是否存在
* 在判斷文件類型,xls還是xlsx
*/
if (!filepath.exists()) {
output("文件不存在!");
}
String filename = filepath.toString();//轉化爲string類型
String fileType = filename.substring(filename.lastIndexOf(".") + 1, filename.length());//提取文件名後綴
InputStream is = null;
Workbook wb = null;
try {
is = new FileInputStream(filepath);
if (fileType.equals("xls")) {
wb = new HSSFWorkbook(is);
} else if (fileType.equals("xlsx")) {
wb = new XSSFWorkbook(is);
} else {
output("文件名錯誤!");
}
//新建集合,考慮到要用value值去查詢數據庫,所以value設置爲string類型
List<List<Map<String, String>>> result = new ArrayList<List<Map<String,String>>>();
int sheetSize = wb.getNumberOfSheets();//獲取表格的個數
for (int i = 0; i < sheetSize; i++) {//遍歷所有表格
Sheet sheet = wb.getSheetAt(i);
List<Map<String, String>> sheetList = new ArrayList<Map<String, String>>();
List<String> titles = new ArrayList<String>();//放置所有的標題
int rowSize = sheet.getLastRowNum() + 1;//此處getLastRowNum()方法獲取的行數從0開始,故要+1
for (int j = 0; j < rowSize; j++) {//遍歷所有行
Row row = sheet.getRow(j);
if (row == null) {//略過空行
continue;
}
int cellSize = row.getLastCellNum();//獲取列數
if (j == 0) {//第一行是標題行
for (int k = 0; k < cellSize; k++) {//添加到標題集合中
Cell cell = row.getCell(k);
titles.add(cell.toString());
}
} else {//其他行是數據行,爲數字
Map<String, String> rowMap = new HashMap<String, String>();//保存一行的數據
for (int k = 0; k < titles.size(); k++) {//遍歷保存此行數據
Cell cell = row.getCell(k);
String key = titles.get(k);
String value = null;
if (cell != null) {
/*這裏因爲讀取excel數據默認值是double類型的,但我的數據都是整數,爲了方便先進行一次轉換
* 先判斷數據類型,然後先轉換然後在複製給value
* 數值類型是0,字符串類型是1,公式型是2,空值是3,布爾值4,錯誤5
*/
if (row.getCell(k).getCellType() == 0) {
value =(int) row.getCell(k).getNumericCellValue()+"";
}else {
value = cell.toString();//轉換成string賦值給value
}
}
rowMap.put(key, value);//把數據存入map集合
}
sheetList.add(rowMap);//把存好行的數據存入表格的集合中
}
}
result.add(sheetList);//把表格的數據存到excel的集合中
}
return result;
} catch (FileNotFoundException e) {
throw e;
} finally {
if (is != null) {
is.close();
}
}
}
方法的思路是從網上看來的,中間把代碼敲了一遍,發現很多地方不太對,不知道是不是因爲年份久遠的原因。這個方法我做了一些自己的優化,輸入參數那個地方我改成了file類型,判斷了一下文件是否存在。在讀取行數據的時候先轉換了一下格式。中文的註釋,我也自己重新寫了一遍。希望能對你有所幫助。