技術要點:
使用框架:jxl.jar
附上代碼:
/**
* 讀取Excel文件
*
* @param inputStream
* @return
*/
private List<Map> readExcel(InputStream inputStream) {
Workbook workbook = null;// 工作簿對象
Cell cell = null;// 單元格對象
try {
// 獲取Excel文件對象
workbook = Workbook.getWorkbook(inputStream);
// 獲取文件的指定工作表,默認的第一個
Sheet sheet = workbook.getSheet(0);
log.debug("導入文件的總行數---" + sheet.getRows());
if (sheet == null || sheet.getRows() < 1) {
return new ArrayList<Map>();
}
Map headMap = new HashMap();
//從第一行開始讀取,獲取表頭文字
for (int i = 0; i < 1; i++) {
// 創建一個數組 , 用來存儲每一列的值
String[] strArray = new String[sheet.getColumns()];
//從第一列開始讀取,獲取表頭的文字
for (int j = 1; j < strArray.length; j++) {
// 獲取第i行,第j列的值
cell = sheet.getCell(j, i);
strArray[j] = cell.getContents();
Pattern p = Pattern.compile("\\s*|\t|\r|\n");
Matcher m = p.matcher(strArray[j]);
strArray[j] = m.replaceAll("");
headMap.put(j, strArray[j]);
}
}
// 創建一個list 用來存儲讀取的內容
List<Map> list = new ArrayList<Map>();
// 行數(表頭的目錄不需要,從1開始)
for (int i = 1; i < sheet.getRows(); i++) {
Map map = new HashMap();
// 創建一個數組 , 用來存儲每一列的值
String[] strArray = new String[sheet.getColumns()];
if (sheet.getColumns() < 1) {
return new ArrayList<Map>();
}
for (int j = 1; j < strArray.length; j++) {
// 獲取第i行,第j列的值
cell = sheet.getCell(j, i);
strArray[j] = cell.getContents();
String headItem = String.valueOf(headMap.get(j));
map.put(TpcEnum.getHeadName(headItem), strArray[j]);
}
// 把剛獲取的列存入list
list.add(map);
}
return list;
} catch (FileNotFoundException e) {
e.printStackTrace();
return new ArrayList<Map>();
} catch (BiffException e) {
e.printStackTrace();
return new ArrayList<Map>();
} catch (IOException e) {
e.printStackTrace();
return new ArrayList<Map>();
}
}