| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
9年前发布

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)$");   }      }