You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Selenium+Java读取.xls文件时出现的OLE2异常

手动打开Excel时的错误窗口1
手动打开Excel时的错误窗口2

大家好,我是Omkaar,一名自动化测试工程师(Selenium+Java方向)。

我遇到了自动化读取.xls格式(Microsoft Excel 97-2003工作表)Excel文件的场景,目前无法读取该文件:手动打开会弹出错误窗口(见上图),使用自动化代码读取时触发OLE2异常。

我读取Excel文件的步骤如下:

  • 创建File类对象,指定目标文件路径。
  • 创建Workbook实例。
  • 创建Sheet、Row和Cell实例。
  • 使用for循环遍历单元格获取数据(代码如下)。

我的代码

public class WorkWithXLSFile extends BaseTest {

    public static void main(String[] args) {
        
        try {
            File file = new File("C:\\Users\\Omkar Shrotri\\Downloads\\Ticketdetails.xls");

            if (file.exists()) {

                FileInputStream fis = new FileInputStream(file);

                HSSFWorkbook wb = new HSSFWorkbook(fis);

                HSSFSheet sheet1 = wb.getSheetAt(0);

                DataFormatter formatter11 = new DataFormatter();

                for (int i = 0; i <= 7; i++) {
                    String excel_data = formatter11.formatCellValue(sheet1.getRow(2).getCell(i));
                    // int s = i+1;
                    String web_data = driver.findElement(By.xpath("//table/tbody/tr[1]/td['" + i + "']")).getText();
                    if (excel_data.equals(web_data)) {
                        System.out.println("Passed");
                    }
                }

            }
        } catch (Exception NotOLE2FileException) {
            System.out.print(NotOLE2FileException);
            // handle popup
            // try code
        }
        

    }
}

问题分析与解决办法

  1. 修复或转换异常文件
    手动打开报错说明文件本身不符合标准.xls的OLE2格式,可能是后缀错误或文件损坏:

    • 用Excel自带修复功能:打开Excel后,通过「文件-打开-浏览」选中该文件,点击打开按钮旁的下拉箭头选择「打开并修复」。
    • 修复成功后,将文件另存为标准的.xls或.xlsx格式,再用代码读取。
  2. 优化代码兼容性
    改用WorkbookFactory自动识别Excel格式,替代固定的HSSFWorkbook,兼容.xls和.xlsx:

    // 替换原HSSFWorkbook创建代码
    Workbook wb = WorkbookFactory.create(fis);
    Sheet sheet1 = wb.getSheetAt(0);
    

    需确保项目中poi和poi-ooxml依赖版本一致,避免版本冲突。

  3. 精准异常处理
    替换泛用的Exception捕获,明确针对目标异常处理,提升排查效率:

    } catch (NotOLE2FileException e) {
        System.err.println("非标准OLE2格式文件:" + e.getMessage());
        // 可在此添加格式转换逻辑
    } catch (IOException e) {
        System.err.println("文件读取IO异常:" + e.getMessage());
    }
    

内容的提问来源于stack exchange,提问作者Omkar Shrotri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:40:19