美文网首页
Java使用Apache POI 读取Excel表格数据

Java使用Apache POI 读取Excel表格数据

作者: 大大大浣熊 | 来源:发表于2018-01-17 10:37 被阅读0次

工作中很多情况下我们需要使用Excel来配置部分数据,以此来减少数据库的查询(游戏相关行业使用相对频繁)。以前写过一篇Java使用POI导出数据到excel的文章,现在记录下我使用POI读取Excel的方法。
其实这个操作并不难,总结起来一个流程大致如下:
打开excel文件 --> 找到需要读取的表格 --> 找到数据存在的单元格 --> 读取数据 --> 关闭文件。现在一步一步来看。

假设有一个excel文件config.xlsx。里面的数据如下 image.png
我们如何取获取这个单元格中的数据9999呢?
1.打开文件
OPCPackage pkgData = OPCPackage.open(RESOURCE_PATH);
//打开Excel文件并获取读写权限,并创建一个OPCPackage ,这个OPCPackage官网介绍是“一个能存储大量数据对象的容器”,并且是实现了Closeable接口,后面关闭释放资源就是通过它。

2.获取需要读取的表格

XSSFWorkbook workbook = new XSSFWorkbook(pkgData);
XSSFSheet sheet = workbook.getSheet(SHEET_NAME);
//XSSFWorkbook 工作簿,通过OPCPackage 来创建。XSSFSheet 就是我们需要的工作表,可以根据表名来获取,也可以根据表索引来获取

3.找到数据存在的单元格,我这里写了个方法。这里的单元格是命名了的,可能和网上一些做法不一样。

public static Cell findCell(XSSFWorkbook workbook, XSSFSheet sheet, String name) {
        int namedCellIdx = workbook.getNameIndex(name);
        Name aNamedCell = workbook.getNameAt(namedCellIdx);
        AreaReference aref = new AreaReference(aNamedCell.getRefersToFormula());
        CellReference[] crefs = aref.getAllReferencedCells();
        for (int i=0; i<crefs.length; i++) {
            Row r = sheet.getRow(crefs[i].getRow());
            Cell c = r.getCell(crefs[i].getCol());
            return c;
        }
        return null;
    }
//根据单元格名称获取单元格,每个excel表中的单元格名称都是唯一的

4.读取单元格内容并关闭文件。

//如果单元格中的数据是int类型的
Integer data = new Integer((int) cell.getNumericCellValue());
//String
String data = cell.getStringCellValue();
//double
cell.getNumericCellValue();
//数据读取完成后在finally代码块中关闭文件
pkgData.close();

好了,简单的单个单元格数据读取就是这样了。

但是在实际生产过程中经常会碰到很复杂的配置表,比如下面这样的。 image.png
表中的数据并不是一个单元格,而是具有某种结构的数据,并有多条记录。这种表要怎么读呢?每个单元格设置一个名称?我相信没人会这么做的。我这里只是给最开始的cell中定义了一个名称,可以看图中的选中的单元格,命名为data。获取了第一个单元格,然后循环获取后面的单元格,就可以获得其它所有的单元格了。

1.首先获取被命名的单元格,然后获取这个单元格的行索引和列索引

这里假设已经获取到了那个单元格cell。
int columIndex = cell.getColumnIndex();
int rowIndex = cell.getRowIndex();

2.循环遍历行

for (int i = 0; i < 5; i++) {
  XSSFRow row = sheet.getRow(rowIndex + i);
 Cell c = row.getCell(columIndex);//data单元格
Cell c1 = row.getCell(columIndex+1);//描述1单元格
Cell c2 = row.getCell(columIndex+3);//状态1单元格
//注意c2单元格,它的列索引是在第一个单元格基础上加3,因为描述单元格是两个单元格合并的,所以是加3而不是加2。
}

这样就可以将所需要的数据全部获取到。
POI读取Excel就到这了,很基础,很简单。如果各位有什么疑问欢迎讨论。

相关文章

网友评论

      本文标题:Java使用Apache POI 读取Excel表格数据

      本文链接:https://www.haomeiwen.com/subject/lsteoxtx.html