xlsx文件java怎么读取

xlsx文件java怎么读取

Java中读取xlsx文件,可使用Apache POI库,通过FileInputStream加载文件,用XSSFWorkbook解析,再遍历Sheet、Row和Cell读取数据...

优惠价格:¥ 0.00
当前位置:首页 > 后端开发 > xlsx文件java怎么读取
详情介绍
Java中读取xlsx文件,可使用Apache POI库,通过FileInputStream加载文件,用XSSFWorkbook解析,再遍历Sheet、Row和Cell读取数据

Java中读取xlsx文件,通常使用Apache POI库来实现,以下是详细的步骤和示例代码:

添加依赖

如果你使用的是Maven项目,需要在pom.xml文件中添加Apache POI的依赖,以下是常用的依赖配置:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version>
</dependency>

如果不是Maven项目,可以手动下载poi-ooxml及其依赖的jar包,并添加到项目的类路径中。

编写读取xlsx文件的代码

以下是一个基本的Java程序,用于读取xlsx文件并打印其内容:

import org.apache.poi.ss.usermodel.;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class ReadXLSX {
    public static void main(String[] args) {
        String filePath = "path/to/your/excelFile.xlsx"; // 替换为你的xlsx文件路径
        try (FileInputStream fis = new FileInputStream(new File(filePath));
             Workbook workbook = new XSSFWorkbook(fis)) {
            // 获取第一个工作表
            Sheet sheet = workbook.getSheetAt(0);
            // 遍历行
            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;
                        case FORMULA:
                            System.out.print(cell.getCellFormula() + "t");
                            break;
                        default:
                            System.out.print("t");
                            break;
                    }
                }
                System.out.println();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

代码说明

  • FileInputStream:用于读取xlsx文件。
  • XSSFWorkbook:用于解析xlsx文件。
  • Sheet:表示Excel中的一个工作表。
  • Row:表示Excel中的一行。
  • Cell:表示Excel中的一个单元格。
  • cell.getCellType():用于获取单元格的类型,如字符串、数字、布尔值等。
  • try-with-resources:确保文件流和工作簿在使用后自动关闭,避免资源泄露。

处理大文件

如果需要处理非常大的xlsx文件,可以使用Apache POI的SXSSFWorkbook类,它支持流式读取,减少内存占用,以下是一个简单的示例:

import org.apache.poi.ss.usermodel.;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class ReadLargeXLSX {
    public static void main(String[] args) {
        String filePath = "path/to/your/largeExcelFile.xlsx"; // 替换为你的大文件路径
        try (FileInputStream fis = new FileInputStream(new File(filePath));
             Workbook workbook = new SXSSFWorkbook(new XSSFWorkbook(fis), 100)) { // 100是缓存的行数
            // 获取第一个工作表
            Sheet sheet = workbook.getSheetAt(0);
            // 遍历行
            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;
                        case FORMULA:
                            System.out.print(cell.getCellFormula() + "t");
                            break;
                        default:
                            System.out.print("t");
                            break;
                    }
                }
                System.out.println();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

常见问题及解决方案

Q1:如何处理日期类型的单元格?

A1:对于日期类型的单元格,可以使用DateUtil.isCellDateFormatted(cell)来判断,然后使用cell.getDateCellValue()来获取日期值。

if (DateUtil.isCellDateFormatted(cell)) {
    System.out.print(cell.getDateCellValue() + "t");
}

Q2:如何读取指定单元格的值?

A2:可以通过RowCellgetCell(int cellNum)方法来获取指定列的单元格。

Row row = sheet.getRow(0); // 获取第一行
Cell cell = row.getCell(0); // 获取第一列的单元格
System.out.print(cell.getStringCellValue
0