使用poi.jar读取Excel文件

一、准备jar包

  1.poi.jar                    读取xls格式的Excel     下载地址:https://mvnrepository.com/artifact/org.apache.poi/poi

  2.poi-ooxml.jar         读取xlsx格式的Exce     下载地址:https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml

  3.poi-ooxml-schemas.jar                               下载地址:https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas

  4.xmlbeans.jar                                               下载地址:https://mvnrepository.com/artifact/org.apache.xmlbeans/xmlbeans

  注意:各位jar包的版本需要匹配,否则会因为版本冲突问题报错。我这里使用的jar包版本分别为:poi-3.14.jar、poi-ooxml-3.14.jar、poi-ooxml-schemas-3.14.jar、xmlbeans-2.6.0.jar

二、主要API

  1.import org.apache.poi.ss.usermodel.Workbook,对应Excel文档;

  2.import org.apache.poi.hssf.usermodel.HSSFWorkbook,对应xls格式的Excel文档;

  3.import org.apache.poi.xssf.usermodel.XSSFWorkbook,对应xlsx格式的Excel文档;

  4.import org.apache.poi.ss.usermodel.Sheet,对应Excel文档中的一个sheet;

  5.import org.apache.poi.ss.usermodel.Row,对应一个sheet中的一行;

  6.import org.apache.poi.ss.usermodel.Cell,对应一个单元格。

三、测试代码如下:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
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;

public class ExcelTest {

    public static void main(String[] args) throws Exception {
        String fileName = "E://abc.xlsx";
        readExcel(fileName);
    }

    private static void readExcel(String fileName) {
        Workbook workbook = null;
        Row row = null;
        //获取Excel文档
        workbook = getWorkbook(fileName);
        //获取Excel文档的第一个sheet页
        Sheet sheet = workbook.getSheetAt(0);
        //获取文档中已保存数据的行数
        int rowNum = sheet.getPhysicalNumberOfRows();
        //获取第一行
        row = sheet.getRow(0);
        //获取当前行已保存数据的最大列数
        int colnum = row.getPhysicalNumberOfCells();
        for (int i = 0; i < rowNum; i++) {
            row = sheet.getRow(i);
            if (null != row)
            {
                for (int j = 0; j < colnum; j++) {
                    Cell cell = row.getCell(j);
                    System.out.println(getValueFromCell(cell));
                }
            }
        }
    }

    private static Workbook getWorkbook(String fileName) {//根据后缀获取Excel表格
        Workbook workbook = null;
        String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
        InputStream in = null;
        try {
            in = new FileInputStream(fileName);
            if ("xls".equals(suffix))
            {
                workbook = new HSSFWorkbook(in);
            }
            else if ("xlsx".equals(suffix))
            {
                workbook = new XSSFWorkbook(in);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return workbook;
    }
    
    private static Object getValueFromCell(Cell cell) {//获取单元格的值
        Object value = null;
        if (null == cell)
        {
            return "";
        }
        //判断cell类型
        switch(cell.getCellType()){
        case Cell.CELL_TYPE_NUMERIC:{
            value = String.valueOf(cell.getNumericCellValue());
            break;
        }
        case Cell.CELL_TYPE_FORMULA:{
            //判断cell是否为日期格式
            if(DateUtil.isCellDateFormatted(cell)){
                //转换为日期格式YYYY-mm-dd
                value = cell.getDateCellValue();
            }else{
                //数字
                value = String.valueOf(cell.getNumericCellValue());
            }
            break;
        }
        case Cell.CELL_TYPE_STRING:{
            value = cell.getRichStringCellValue().getString();
            break;
        }
        default:
            value = "";
        }
        return value;
    }
}

四、Execl文档数据及打印结果

 

猜你喜欢

转载自www.cnblogs.com/suziyu/p/10946668.html