Java POI实现数据驱动Excel读写:异常处理与实战教程

需积分: 9 2 下载量 3 浏览量 更新于2024-09-15 1 收藏 420KB PDF 举报
POI是Apache POI库,一个用于处理Microsoft Office格式文件(如Excel)的Java API,它允许开发者在Java应用程序中读取、创建和修改Excel文档。本文主要讲解如何利用POI进行Excel的数据驱动,即在自动化测试中使用POI从Excel表格中读取和写入数据。 首先,数据驱动的核心是将测试数据存储在Excel表格中,这样可以方便地管理大量测试数据,并通过代码动态调用。文章提到的步骤如下: 1. **设置环境**:导入必要的POI库,例如`XSSFWorkbook`和`HSSFWorkbook`,以及相关的异常处理类,如`FileNotFoundException`。 2. **打开Excel文件**:使用`FileInputStream`创建一个二进制文件流,然后使用`XSSFWorkbook`或`HSSFWorkbook`加载Excel文件,如`new XSSFWorkbook(new FileInputStream("Excel路径"))`。 3. **定位工作表**:根据需要读取的Sheet名称,获取对应的`Sheet`对象,如`ExcelWSheet = ExcelWBook.getSheet(SheetName)`。 4. **读取特定单元格**:通过行号和列号获取`Row`和`Cell`对象,然后调用`getCell()`方法读取单元格的值,如`Cell = ROW.getCell(ColNum)`。 5. **异常处理**:在实际操作中,可能会遇到文件不存在、指定工作表不存在或单元格索引超出范围等异常。文章提到了两种常见的异常处理方式: - **文件未找到异常**:使用try-catch块捕获`FileNotFoundException`,例如`try { FileInputStreamExcelFile = new FileInputStream("Excel路径"); } catch (FileNotFoundException e) { ... }`。 - **工作表不存在异常**:类似地,如果需要检查特定工作表是否存在,可以在尝试获取`Sheet`对象后添加异常处理,如`if (!ExcelWBook.getSheet(SheetName) != null) { ... } else { ... }`。 6. **不同类型数据的处理**:由于Excel单元格可能包含不同类型的值(如字符串、数字、日期等),在读取时需要适当地转换数据类型,以便正确处理。 通过这些步骤,可以实现从Excel中读取数据并将其应用到自动化测试中,同时确保对可能出现的异常进行妥善处理,提高了测试的稳定性和灵活性。POI的强大功能使得数据驱动测试在IT项目中变得简单易用。
2013-04-28 上传
目前处理Excel的开源javaAPI主要有两种,一是Jxl(Java Excel API),Jxl只支持Excel2003以下的版本。另外一种是Apache的Jakarta POI,相比于Jxl,POI对微软办公文档的支持更加强大,但是它使用复杂,上手慢。POI可支持更高的Excel版本2007。对Excel的读取,POI有两种模式,一是用户模式,这种方式同Jxl的使用很类似,使用简单,都是将文件一次性读到内存,文件小的时候,没有什么问题,当文件大的时候,就会出现OutOfMemory的内存溢出问题。第二种是事件驱动模式,拿Excel2007来说,其内容采用XML的格式来存储,所以处理excel就是解析XML,而目前使用事件驱动模式解析XML的API是SAX(Simple API for XML),这种模型在读取XML文档时,并没有将整个文档读入内存,而是按顺序将整个文档解析完,在解析过程中,会主动产生事件交给程序中相应的处理函数来处理当前内容。因此这种方式对系统资源要求不高,可以处理海量数据。笔者曾经做过测试,这种方法处理一千万条,每条五列的数据花费大约11分钟。可见处理海量数据的文件事件驱动是一个很好的方式。而本文中用到的AbstractExcel2003Reader、AbstractExcel2007Reader对Excel的读取都是采用这种POI的事件驱动模式。至于Excel的写操作,对较高版本的Excel2007,POI提供了很好的支持,主要流程是第一步构建工作薄和电子表格对象,第二步在一个流中构建文本文件,第三步使用流中产生的数据替换模板中的电子表格。这种方式也可以处理海量数据文件。AbstractExcel2007Writer就是使用这种方式进行写操作。对于写入较低版本的Excel2003,POI使用了用户模式来处理,就是将整个文档加载进内存,如果数据量大的话就会出现内存溢出的问题,Excel2003Writer就是使用这种方式。据笔者的测试,如果数据量大于3万条,每条8列的话,就会报OutOfMemory的错误。Excel2003中每个电子表格的记录数必须在65536以下,否则就会发生异常。目前还没有好的解决方案,建议对于海量数据写入操作,尽量使用Excel2007。
2016-06-20 上传