接口工作簿,工作表和行与Classess XSSFWorkbook,XSSFSheet的混淆

问题描述

以下是访问excel工作表的所有单元格的简单代码。我没上课 XSSFWorkbook,XSSFSheet ...等 我的困惑是,如果接口仅持有方法的签名,那我怎么能 使用接口的getRow,getCell之类的方法

(在我键入工作表然后键入句点时列出的那些定义的方法在哪里)

谢谢。

 FileInputStream inputStream = new FileInputStream("C:\\Eclipse\\WorkSpace\\YPractice\\TestCase.xlsx");
    
    Workbook guru99Workbook = null;     
    
    guru99Workbook = new XSSFWorkbook(inputStream);                                 
    Sheet sheet = guru99Workbook.getSheet("KeywordFramework");
    
    int RowNum = sheet.getLastRowNum() - sheet.getFirstRowNum();
    

    for (int i = 0; i<=RowNum; i++)
    {

        Row row = sheet.getRow(i);
    
        
        for(int j= 0; j<row.getLastCellNum(); j++)
        {
            System.out.println("Data = " +i + " " +row.getCell(j));
            
        }
    }

解决方法

您在执行以下操作时正在使用XSSFWorkbook的{​​{1}}实现:

Workbook

稍后您在guru99Workbook = new XSSFWorkbook(inputStream); 上使用getSheet()。假设guru99Workbookguru99Workbook,您将获得一个XSSFWorkbook的回报。

这类似于:

XSSFSheet

要回答第二个问题,方法在以下列表中列出:

  1. List<String> list = new ArrayList<>(); getSheet(String name)
  2. XSSFWorkbookgetRow(int rownum)getFirstRowNum()getLastRowNum()
  3. XSSFSheetgetLastCellNum() getCell(int cellnum)
,

getRow(int)中定义了Sheet interface方法,这就是为什么您可以从Sheet sheet变量中调用它的原因。同样,getCell(int)是在Row界面中定义的,因此可以通过您的Row类型的row变量进行访问。

您关于Java接口如何工作的直觉是完全正确的。您可能误读了SheetRow接口的文档。