java利用poi解析excel文件

Posted 一响贪欢

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java利用poi解析excel文件相关的知识,希望对你有一定的参考价值。

首先需要引入以下jar包

如果使用maven,需要添加两个依赖

  <dependencies>
    <dependency>
          <groupId>org.apache.poi</groupId>
          <artifactId>poi</artifactId>
          <version>3.15</version>
      </dependency>
      <dependency>
          <groupId>org.apache.poi</groupId>
          <artifactId>poi-ooxml</artifactId>
          <version>3.15-beta2</version>
      </dependency>
  </dependencies>

 

excel分为两种后缀,一是xls,二是xlsx。

首先针对xls格式的excel进行解析:

    public List<String[]> readExcel(File file){
        List<String[]> list = new ArrayList<>();
        
        try {
            HSSFWorkbook hw = new HSSFWorkbook(new FileInputStream(file));
            
            for (int i = 0; i < hw.getNumberOfSheets(); i++) {
                HSSFSheet hs = hw.getSheetAt(i);
                if(hs.getLastRowNum() == 0)
                    continue;
                
                for (int j = 0; j <= hs.getLastRowNum(); j++) {//
                    HSSFRow row = hs.getRow(j);
                    String[] array = new String[row.getLastCellNum()];
                    
                    for (int k = 0; k < row.getLastCellNum(); k++) {
                        HSSFCell cell = row.getCell(k);
                        array[k] = this.getValue(cell);
                    }
                    list.add(array);
                }
            }
            
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        
        return list;
    }
    
    private String getValue(HSSFCell cell){
        String value;
        CellType type = cell.getCellTypeEnum();
        
        switch (type) {
        case STRING:
            value = cell.getStringCellValue();
            break;
        case BLANK:
            value = "";
            break;
        case BOOLEAN:
            value = cell.getBooleanCellValue() + "";
            break;
        case NUMERIC:
            value = cell.getNumericCellValue() + "";
            break;
        case FORMULA:
            value = cell.getCellFormula();
            break;
        case ERROR:
            value = "非法字符";
            break;
        default:
            value = "";
            break;
        }
        return value;
    }

对于xlsx格式的excel,与上者的区别在于将HSSF***换成XSSF***,样例如下:

    public List<String[]> readExcel(File file){
        List<String[]> list = new ArrayList<>();
        
        try {
            XSSFWorkbook xw = new XSSFWorkbook(new FileInputStream(file));
            
            for (int i = 0; i < xw.getNumberOfSheets(); i++) {
                XSSFSheet xs = xw.getSheetAt(i);
                if(xs.getLastRowNum() == 0)
                    continue;
                
                for (int j = 0; j <= xs.getLastRowNum(); j++) {
                    XSSFRow row = xs.getRow(j);
                    String[] array = new String[row.getLastCellNum()];
                    
                    for (int k = 0; k <= row.getLastCellNum(); k++) {
                        XSSFCell cell = row.getCell(k);
                        if(cell == null)
                            continue;
                        array[k] = this.getValue(cell);
                    }
                    list.add(array);
                }
            }
            
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        
        return list;
    }
    
    private String getValue(XSSFCell cell){
        String value;
        CellType type = cell.getCellTypeEnum();
        
        switch (type) {
        case STRING:
            value = cell.getStringCellValue();
            break;
        case BLANK:
            value = "";
            break;
        case BOOLEAN:
            value = cell.getBooleanCellValue() + "";
            break;
        case NUMERIC:
            value = cell.getNumericCellValue() + "";
            break;
        case FORMULA:
            value = cell.getCellFormula();
            break;
        case ERROR:
            value = "非法字符";
            break;
        default:
            value = "";
            break;
        }
        return value;
    }

 

以上是关于java利用poi解析excel文件的主要内容,如果未能解决你的问题,请参考以下文章

利用POI解析excel文件小例子

java使用poi解析或处理excel的时候,如何防止数字变成科学计数法的

Java 利用poi 导出excel表格 如何在导出时自由选择路径?

java利用poi读取Excel文件

java使用poi读取excel时,电话号码变成了科学计数法,整数变成double,怎么改过来

java利用poi技术导入批量excel数据,并且分段存入数据库怎么解决