java如何获取excel有多少行数据

java如何获取excel有多少行数据

要在Java中获取Excel文件的行数数据,你可以使用Apache POI库、通过读取工作表、遍历行数、使用getLastRowNum()方法。Apache POI库是一个强大的Java库,专门用于读取和写入Microsoft Office文件,包括Excel。具体步骤如下:

  1. 导入Apache POI库:你需要在你的项目中添加Apache POI库的依赖项。
  2. 加载Excel文件:使用FileInputStream加载Excel文件。
  3. 获取工作表:通过Workbook对象获取指定的工作表。
  4. 获取行数:使用getLastRowNum()方法获取最后一行的行号(从0开始计数),然后加一得到行数。

其中最关键的一步是:使用getLastRowNum()方法获取最后一行的行号。这个方法会返回当前工作表中最后一行的索引,索引从0开始,因此你需要将其加一来得到总行数。接下来我们将详细介绍如何实现这一过程。

一、导入Apache POI库

首先,你需要在你的Java项目中添加Apache POI库的依赖项。如果你使用的是Maven项目,可以在pom.xml文件中添加以下依赖:

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi</artifactId>

<version>5.2.3</version>

</dependency>

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi-ooxml</artifactId>

<version>5.2.3</version>

</dependency>

<dependency>

<groupId>org.apache.xmlbeans</groupId>

<artifactId>xmlbeans</artifactId>

<version>5.1.1</version>

</dependency>

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi-ooxml-schemas</artifactId>

<version>4.1.2</version>

</dependency>

<dependency>

<groupId>org.apache.commons</groupId>

<artifactId>commons-collections4</artifactId>

<version>4.4</version>

</dependency>

这些依赖项包括了Apache POI的核心库、用于处理Excel 2007及以上版本的poi-ooxml库、以及一些必要的XML处理库。

二、加载Excel文件

在加载Excel文件之前,需要创建一个FileInputStream来读取文件的内容。以下是一个示例代码:

import java.io.FileInputStream;

import java.io.IOException;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.ss.usermodel.WorkbookFactory;

public class ExcelReader {

public static void main(String[] args) {

String excelFilePath = "path/to/your/excel/file.xlsx";

try (FileInputStream fis = new FileInputStream(excelFilePath)) {

Workbook workbook = WorkbookFactory.create(fis);

// 其他操作

} catch (IOException e) {

e.printStackTrace();

}

}

}

三、获取工作表

加载Excel文件后,你需要获取指定的工作表。你可以通过索引或工作表的名称来获取:

import org.apache.poi.ss.usermodel.Sheet;

public class ExcelReader {

public static void main(String[] args) {

String excelFilePath = "path/to/your/excel/file.xlsx";

try (FileInputStream fis = new FileInputStream(excelFilePath)) {

Workbook workbook = WorkbookFactory.create(fis);

Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表

// 或者通过名称获取工作表

// Sheet sheet = workbook.getSheet("Sheet1");

} catch (IOException e) {

e.printStackTrace();

}

}

}

四、获取行数

现在,你已经获取了工作表,接下来就是获取行数。使用getLastRowNum()方法可以获取最后一行的行号,然后加一得到总行数:

public class ExcelReader {

public static void main(String[] args) {

String excelFilePath = "path/to/your/excel/file.xlsx";

try (FileInputStream fis = new FileInputStream(excelFilePath)) {

Workbook workbook = WorkbookFactory.create(fis);

Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表

int rowCount = sheet.getLastRowNum() + 1; // 获取总行数

System.out.println("Total number of rows: " + rowCount);

} catch (IOException e) {

e.printStackTrace();

}

}

}

五、处理空行和非连续行

在实际应用中,Excel文件可能包含空行或非连续行。getLastRowNum()方法返回的是最后一行的行号,但并不检查中间是否有空行。如果你需要考虑这些情况,可以遍历所有行并计数实际存在的行:

import org.apache.poi.ss.usermodel.Row;

public class ExcelReader {

public static void main(String[] args) {

String excelFilePath = "path/to/your/excel/file.xlsx";

try (FileInputStream fis = new FileInputStream(excelFilePath)) {

Workbook workbook = WorkbookFactory.create(fis);

Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表

int rowCount = 0;

for (Row row : sheet) {

if (row != null) {

rowCount++;

}

}

System.out.println("Total number of non-empty rows: " + rowCount);

} catch (IOException e) {

e.printStackTrace();

}

}

}

六、处理大文件和性能优化

对于大型Excel文件,逐行遍历可能会影响性能。为了提高效率,你可以使用流式API(Streaming API),它允许逐行读取而不加载整个文件到内存中。Apache POI提供了一个SXSSFWorkbook类,可以用于处理大文件:

import org.apache.poi.xssf.streaming.SXSSFWorkbook;

public class ExcelReader {

public static void main(String[] args) {

String excelFilePath = "path/to/your/excel/file.xlsx";

try (FileInputStream fis = new FileInputStream(excelFilePath)) {

SXSSFWorkbook workbook = new SXSSFWorkbook(new XSSFWorkbook(fis));

Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表

int rowCount = 0;

for (Row row : sheet) {

if (row != null) {

rowCount++;

}

}

System.out.println("Total number of non-empty rows: " + rowCount);

// 释放内存

workbook.dispose();

} catch (IOException e) {

e.printStackTrace();

}

}

}

使用SXSSFWorkbook类,数据会以流的方式读取,并且在读取完毕后及时释放内存,适合处理大文件。

七、处理不同类型的Excel文件

Apache POI支持读取不同版本的Excel文件,包括Excel 97-2003格式(.xls)和Excel 2007及以上格式(.xlsx)。你可以使用WorkbookFactory来自动识别文件类型:

import org.apache.poi.ss.usermodel.WorkbookFactory;

public class ExcelReader {

public static void main(String[] args) {

String excelFilePath = "path/to/your/excel/file.xlsx";

try (FileInputStream fis = new FileInputStream(excelFilePath)) {

Workbook workbook = WorkbookFactory.create(fis);

Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表

int rowCount = sheet.getLastRowNum() + 1; // 获取总行数

System.out.println("Total number of rows: " + rowCount);

} catch (IOException e) {

e.printStackTrace();

}

}

}

八、总结

通过使用Apache POI库,你可以方便地在Java中读取Excel文件并获取行数。关键步骤包括导入Apache POI库、加载Excel文件、获取工作表以及使用getLastRowNum()方法获取行数。在实际应用中,你还需要考虑空行、非连续行以及性能优化。通过掌握这些技巧,你可以高效地处理各种Excel文件并获取所需的数据。

相关问答FAQs:

1. 如何在Java中获取Excel文件中的行数?

您可以使用Apache POI库来处理Excel文件。以下是获取Excel文件中行数的示例代码:

import org.apache.poi.ss.usermodel.*;

public class ExcelUtil {
    public static int getRowCount(String filePath, String sheetName) {
        int rowCount = 0;
        try {
            Workbook workbook = WorkbookFactory.create(new File(filePath));
            Sheet sheet = workbook.getSheet(sheetName);
            rowCount = sheet.getLastRowNum() + 1;
        } catch (IOException | InvalidFormatException e) {
            e.printStackTrace();
        }
        return rowCount;
    }
}

2. 如何判断Excel文件是否为空?

要判断Excel文件是否为空,可以使用以下代码:

import org.apache.poi.ss.usermodel.*;

public class ExcelUtil {
    public static boolean isExcelEmpty(String filePath, String sheetName) {
        boolean isEmpty = true;
        try {
            Workbook workbook = WorkbookFactory.create(new File(filePath));
            Sheet sheet = workbook.getSheet(sheetName);
            if (sheet.getLastRowNum() > 0) {
                isEmpty = false;
            }
        } catch (IOException | InvalidFormatException e) {
            e.printStackTrace();
        }
        return isEmpty;
    }
}

3. 如何获取Excel文件中每行的数据?

您可以使用以下代码逐行读取Excel文件中的数据:

import org.apache.poi.ss.usermodel.*;

public class ExcelUtil {
    public static void readExcel(String filePath, String sheetName) {
        try {
            Workbook workbook = WorkbookFactory.create(new File(filePath));
            Sheet sheet = workbook.getSheet(sheetName);
            for (Row row : sheet) {
                for (Cell cell : row) {
                    switch (cell.getCellType()) {
                        case STRING:
                            System.out.print(cell.getStringCellValue() + "t");
                            break;
                        case NUMERIC:
                            System.out.print(cell.getNumericCellValue() + "t");
                            break;
                        case BOOLEAN:
                            System.out.print(cell.getBooleanCellValue() + "t");
                            break;
                        default:
                            System.out.print("t");
                    }
                }
                System.out.println();
            }
        } catch (IOException | InvalidFormatException e) {
            e.printStackTrace();
        }
    }
}

希望这些代码对您有所帮助!如果您有任何其他问题,请随时提问。

原创文章,作者:Edit1,如若转载,请注明出处:https://docs.pingcode.com/baike/346369

(0)
Edit1Edit1
上一篇 2024年8月15日 下午11:20
下一篇 2024年8月15日 下午11:20
免费注册
电话联系

4008001024

微信咨询
微信咨询
返回顶部