Java讀取Excel文件

jopen 9年前發布 | 6K 次閱讀 Java

使用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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!