Java讀取Excel文件
使用poi插件解析Excel文件
下載插件poi-bin-3.8
package com; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.Charset; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.stereotype.Component; import com.csvreader.CsvReader; import com.elin.csp.model.shopUser.entity.ShopUser; @Component public class InputExcelFileService {/ 總行數 */ private int totalRows = 0; / 總列數 / private int totalCells = 0; /** 錯誤信息 / private String errorInfo; / 構造方法 */ public InputExcelFileService() { } /
- @描述:得到總行數
- @時間:2011-8-9 下午04:27:34
- @參數:@return
- @返回值:int */ public int getTotalRows() { return totalRows; } /**
- @描述:得到總列數
- @時間:2011-8-9 下午04:27:45
- @參數:@return
- @返回值:int */ public int getTotalCells() { return totalCells; } /**
- @描述:得到錯誤信息
- @時間:2011-8-9 下午04:28:17
- @參數:@return
- @返回值:String */ public String getErrorInfo() { return errorInfo; } /**
- @描述:驗證excel文件
- @時間:2011-8-9 下午04:06:47
- @參數:@param fileName
- @參數:@return
- @返回值:boolean / public boolean validateExcel(String fileName) { /** 檢查文件名是否為空或者是否是Excel格式的文件 / if (fileName == null || !(WDWUtil.isExcel2003(fileName) || WDWUtil .isExcel2007(fileName))) { errorInfo = "文件名不是excel格式"; return false; } / 檢查文件是否存在 */ File file = new File(fileName); if (file == null || !file.exists()) { errorInfo = "文件不存在"; return false; } return true; } /
- @描述:根據文件名讀取excel文件
- @時間:2011-8-9 下午03:17:45
- @參數:@param fileName
- @參數:@return
- @返回值:List / public List<List<String>> read(String fileName) { List<List<String>> dataLst = new ArrayList<List<String>>(); InputStream is = null; try { /** 驗證文件是否合法 / if (!validateExcel(fileName)) { System.out.println(errorInfo); return null; } / 判斷文件的類型,是2003還是2007 */ boolean isExcel2003 = true; if (WDWUtil.isExcel2007(fileName)) { isExcel2003 = false; } / 調用本類提供的根據流讀取的方法 / File file = new File(fileName); is = new FileInputStream(file); dataLst = read(is, isExcel2003); is.close(); } catch (Exception ex) { ex.printStackTrace(); } finally { if (is != null) { try { is.close(); } catch (IOException e) { is = null; e.printStackTrace(); } } } /** 返回最后讀取的結果 / return dataLst; } /**
- @描述:根據流讀取Excel文件
- @時間:2011-8-9 下午04:12:41
- @參數:@param inputStream
- @參數:@param isExcel2003
- @參數:@return
- @返回值:List / public List<List<String>> read(InputStream inputStream, boolean isExcel2003) { List<List<String>> dataLst = null; try { /** 根據版本選擇創建Workbook的方式 / Workbook wb = isExcel2003 ? new HSSFWorkbook(inputStream) : new XSSFWorkbook(inputStream); dataLst = read(wb); } catch (IOException e) { e.printStackTrace(); } return dataLst; } /**
- @描述:讀取數據
- @時間:2011-8-9 下午04:37:25
- @參數:@param wb
- @參數:@return
- @返回值:List<List<String>> / private List<List<String>> read(Workbook wb) { List<List<String>> dataLst = new ArrayList<List<String>>(); /** 得到第一個shell / Sheet sheet = wb.getSheetAt(0); / 得到Excel的行數 */ this.totalRows = sheet.getPhysicalNumberOfRows(); / 得到Excel的列數 / if (this.totalRows >= 1 && sheet.getRow(0) != null) { this.totalCells = sheet.getRow(0).getPhysicalNumberOfCells(); } /** 循環Excel的行 / for (int r = 0; r < this.totalRows; r++) { Row row = sheet.getRow(r); if (row == null) { continue; } List<String> rowLst = new ArrayList<String>(); / 循環Excel的列 */ for (short c = 0; c < this.getTotalCells(); c++) { Cell cell = row.getCell(c); String cellValue = ""; if (cell == null) { rowLst.add(cellValue); continue; } / 處理Excel的字符串 / // cellValue = cell.getStringCellValue(); // rowLst.add(cellValue); switch (cell.getCellType()) { // 假如當前Cell的Type為NUMERIC case HSSFCell.CELL_TYPE_NUMERIC: { // 判定當前的cell是否為Date if (HSSFDateUtil.isCellDateFormatted(cell)) { // 假如是Date類型則,取得該Cell的Date值 Date date = cell.getDateCellValue(); // 把Date轉換本錢地格式的字符串 cellValue = cell.getDateCellValue().toLocaleString(); } // 假如是純數字 else { // 純數字時,一般為電話號碼或手機號,所以以字符串類型保存 cell.setCellType(Cell.CELL_TYPE_STRING); cellValue = cell.getStringCellValue(); // // 取得當前Cell的數值 // Integer num = new Integer((int) // cell.getNumericCellValue()); // cellValue = String.valueOf(num); } break; } // 假如當前Cell的Type為STRIN case HSSFCell.CELL_TYPE_STRING: // 取得當前的Cell字符串 cellValue = cell.getStringCellValue().replaceAll("'", "''"); break; // 默認的Cell值 default: cellValue = " "; } rowLst.add(cellValue); } /** 保存第r行的第c列 / dataLst.add(rowLst); } return dataLst; } /**
- @描述:main測試方法
- @時間:2011-8-9 下午04:31:35
- @參數:@param args
- @參數:@throws Exception
- @返回值:void
*/
public static void main(String[] args) throws Exception {
InputExcelFileService poi = new InputExcelFileService();
// List<List<String>> list = poi.read("d:/aaa.xls");
List<List<String>> list = poi.read("d:/aab.xlsx");
if (list != null) {
for (int i = 0, ilen = list.size(); i < ilen; i++) {
System.out.println("第" + (i + 1) + "行");
List<String> cellList = list.get(i);
for (int j = 0, jlen = cellList.size(); j < jlen; j++) {
System.out.print(" 第" + (j + 1) + "列值:");
System.out.println(cellList.get(j));
}
}
}
}
public List wdwExcelMethod(String path) {
InputExcelFileService poi = new InputExcelFileService();
List<List<String>> list = poi.read(path);
return list;
}
}
/**
- @描述:工具類
- @時間:2011-8-9 下午04:28:43 */ class WDWUtil { /**
- @描述:是否是2003的excel,返回true是2003
- @時間:2011-8-9 下午03:20:49
- @參數:@param fileName
- @參數:@return
- @返回值:boolean */ public static boolean isExcel2003(String fileName) { return fileName.matches("^.+\.(?i)(xls)$"); } /**
- @描述:是否是2007的excel,返回true是2007
- @時間:2011-8-9 下午03:21:37
- @參數:@param fileName
- @參數:@return
- @返回值:boolean */ public static boolean isExcel2007(String fileName) { return fileName.matches("^.+\.(?i)(xlsx)$"); }
}</pre>
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!