Java之使用POI教你玩转Excel导入与导出

Java之使用POI教你玩转Excel导入与导出

什么是POI

POI是一个Java开发的用于操作Microsoft Office格式文件的开源框架。POI可以读写文档、演示文稿、Excel文件等,并且支持多种文件格式。下面我们主要讲解POI在Java中如何操作Excel文件的导入与导出。

Excel文件的导入

准备工作

首先,我们需要在pom.xml文件中添加POI依赖:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>

读取Excel文件

使用POI读取Excel文件的主要类是XSSFWorkbookXSSFSheet。例如,下面的代码读取Excel文件中第一个Sheet页的所有单元格值:

try (InputStream is = new FileInputStream("example.xlsx")) {
    XSSFWorkbook workbook = new XSSFWorkbook(is);
    XSSFSheet sheet = workbook.getSheetAt(0);
    for (Row row : sheet) {
        for (Cell cell : row) {
            System.out.println(cell.getStringCellValue());
        }
    }
} catch (IOException e) {
    e.printStackTrace();
}

上述代码中,我们首先通过FileInputStream获取Excel文件输入流,然后使用XSSFWorkbook解析Excel文件,再使用getSheetAt()方法获取指定Sheet页,使用RowCell对象遍历每个单元格,最后输出单元格中的字符串值。

写入Excel文件

同样,使用POI写入Excel文件的主要类是XSSFWorkbookXSSFSheet。例如,下面的代码创建一个新的Excel文件,并向其中写入数据:

XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sheet1");
for (int i = 0; i < 10; i++) {
    Row row = sheet.createRow(i);
    for (int j = 0; j < 10; j++) {
        Cell cell = row.createCell(j);
        cell.setCellValue("cell " + i + ", " + j);
    }
}
try (FileOutputStream fos = new FileOutputStream("example.xlsx")) {
    workbook.write(fos);
} catch (IOException e) {
    e.printStackTrace();
}

上述代码中,我们首先创建一个空的XSSFWorkbook对象和一个名为Sheet1的新Sheet页。然后,使用createRow()方法创建10行,使用createCell()方法创建10列,并使用setCellValue()方法向每个单元格写入数据。最后,使用FileOutputStreamXSSFWorkbook对象写入到Excel文件中。

Excel文件的导出

准备工作

同样,我们需要在pom.xml文件中添加POI依赖:

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

将数据导出至Excel文件

下面的代码将一个List对象中的数据导出至Excel文件:

List<User> users = userService.getUsers();
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Users");
int rowIndex = 0;
for (User user : users) {
    Row row = sheet.createRow(rowIndex++);
    row.createCell(0).setCellValue(user.getId());
    row.createCell(1).setCellValue(user.getName());
    row.createCell(2).setCellValue(user.getAge());
}
try (FileOutputStream fos = new FileOutputStream("users.xlsx")) {
    workbook.write(fos);
} catch (IOException e) {
    e.printStackTrace();
}

上述代码中,我们首先获取一个List对象,里面存储了User对象的数据。然后,创建一个空的XSSFWorkbook对象和一个名为Users的新Sheet页。使用createRow()方法创建每行,并使用createCell()方法创建每个单元格,最后使用setCellValue()方法将数据写入每个单元格。

示范

下面我们来看看读取和写入Excel文件的完整示例:

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class ExcelUtils {

    public static List<User> readUsersFromExcel(String filePath) {
        List<User> users = new ArrayList<>();
        try (InputStream is = new FileInputStream(filePath)) {
            XSSFWorkbook workbook = new XSSFWorkbook(is);
            XSSFSheet sheet = workbook.getSheetAt(0);
            for (Row row : sheet) {
                User user = new User();
                user.setId((int) row.getCell(0).getNumericCellValue());
                user.setName(row.getCell(1).getStringCellValue());
                user.setAge((int) row.getCell(2).getNumericCellValue());
                users.add(user);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return users;
    }

    public static void writeUsersToExcel(List<User> users, String filePath) {
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("Users");
        int rowIndex = 0;
        for (User user : users) {
            Row row = sheet.createRow(rowIndex++);
            row.createCell(0).setCellValue(user.getId());
            row.createCell(1).setCellValue(user.getName());
            row.createCell(2).setCellValue(user.getAge());
        }
        try (FileOutputStream fos = new FileOutputStream(filePath)) {
            workbook.write(fos);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String filePath = "users.xlsx";

        // 写入Excel文件
        List<User> users = new ArrayList<>();
        users.add(new User(1, "张三", 30));
        users.add(new User(2, "李四", 35));
        users.add(new User(3, "王五", 25));
        writeUsersToExcel(users, filePath);
        System.out.println("写入Excel文件成功");

        // 读取Excel文件
        List<User> readUsers = readUsersFromExcel(filePath);
        System.out.println("读取到的用户信息如下:");
        for (User user : readUsers) {
            System.out.println(user);
        }
    }
}

上述代码中,我们定义了一个User类用于存储用户信息。在main()方法中,我们首先使用writeUsersToExcel()方法将3个用户信息写入Excel文件中,然后使用readUsersFromExcel()方法从文件中读取用户信息,并输出到控制台中。

结论

本文主要介绍了使用POI在Java中如何操作Excel文件的导入与导出,通过对POI的使用,我们可以快速方便地读取和写入Excel文件中的数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java之使用POI教你玩转Excel导入与导出 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 使用jackson实现对象json之间的相互转换(spring boot)

    下面是使用Jackson库实现对象和JSON格式的相互转换的完整攻略。 前置条件 本文需要你已经掌握Spring Boot框架的基础知识,并且对于Java对象与JSON的基础知识有所了解。 介绍 Jackson是一个Java库,用于将Java对象序列化为JSON格式的字符串,并将JSON格式的字符串反序列化为Java对象。Jackson支持在Java对象和J…

    Java 2023年5月26日
    00
  • 图解如何在Spring Boot中使用JSP页面

    让我来为您详细讲解“图解如何在Spring Boot中使用JSP页面”的完整攻略。 1. 准备工作 在使用JSP页面前,需要确保您已经完成以下准备工作: 在pom.xml文件中添加依赖: xml <dependency> <groupId>org.apache.tomcat.embed</groupId> <arti…

    Java 2023年5月26日
    00
  • GSON实现Java对象与JSON格式对象相互转换的完全教程

    GSON实现Java对象与JSON格式对象相互转换的完全教程 什么是GSON GSON是Google提供的用来在Java对象和JSON数据之间进行序列化和反序列化的Java库。GSON可以将Java对象转化为JSON字符串,也可以将JSON字符串转化为相应的Java对象。 准备工作 在使用GSON之前,您需要做以下准备工作: 下载GSON库 可以通过Mave…

    Java 2023年5月26日
    00
  • 带大家深入了解Spring事务

    带大家深入了解Spring事务的完整攻略 什么是事务 在计算机领域中,事务可以简单理解为一系列操作(如读写数据库)的集合,这些操作在逻辑上是一个整体,在执行过程中要么全部成功,要么全部失败。这就是ACID原则(Atomicity、Consistency、Isolation、Durability)。 Spring的事务管理机制主要是基于Spring AOP实现…

    Java 2023年5月19日
    00
  • java 抓取网页内容实现代码

    Java 抓取网页内容实现代码的完整攻略分为以下几个步骤: 建立与目标网站的网络连接。 Java 通过 URL 对象建立与目标网站的网络连接。URL 对象通过带参数的构造函数传入要访问的网站地址。 URL url = new URL("https://www.example.com"); 获取网络连接的输入流。 通过 URL 对象的 op…

    Java 2023年5月23日
    00
  • java中构造方法及this关键字的用法实例详解(超详细)

    Java中构造方法及this关键字的用法实例详解 构造方法是什么 在Java中,构造方法是一种特殊的成员方法,用于创建对象时初始化对象的状态。一个类可以拥有多个构造方法,但是这些方法必须要有不同的参数列表或参数顺序。 构造方法与一般的成员方法不同,它没有返回值类型,甚至没有void关键字,因为它的返回值就是创建的对象本身。 构造方法的使用 在Java中,当我…

    Java 2023年5月26日
    00
  • 关于页面刷新,事件重复提交的方法分享

    下面为您详细讲解“关于页面刷新,事件重复提交的方法分享”的完整攻略。 1. 前言 在网站的开发过程中,我们经常会遇到一些问题。其中之一就是重复提交,这种情况的出现是因为用户在提交数据后,可能会因为某些原因选择刷新页面或是重新提交,这会导致数据重复提交或页面出错。为了避免这种问题的发生,我们需要采取一些措施来防止页面刷新和事件重复提交。 2. 防止页面刷新 2…

    Java 2023年6月15日
    00
  • 举例讲解Java中Piped管道输入输出流的线程通信控制

    讲解Java中Piped管道输入输出流的线程通信控制的攻略如下: 什么是Piped管道输入输出流 Java中的Piped输入输出流是一种基于管道(pipe)的流方式。管道是一种常见的进程间通信(IPC)的方式。Piped输入输出流提供了一个可以连接线程的管道,其中一个线程通过写入实现输出流的数据传递,而另一个线程通过读取实现输入流的数据读取。 Piped的使…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部