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日

相关文章

  • Mybatis-Plus使用ID_WORKER生成主键id重复的解决方法

    下面为您提供详细的 “Mybatis-Plus使用ID_WORKER生成主键id重复的解决方法”攻略。 问题背景 Mybatis-Plus是一款高效便捷的持久层框架,它支持多种主键生成策略,包括UUID、雪花算法、自增、ID_WORKER等。其中,ID_WORKER是默认的主键生成策略,它通过Twitter的snowflake算法生成64位的唯一id,具有性…

    Java 2023年5月26日
    00
  • 使用Java8进行分组(多个字段的组合分组)

    使用Java8进行分组的完整攻略如下: 准备数据 首先要确保有可用的数据。以下是一个示例数据集: List<Order> orders = Arrays.asList( new Order("A001", BigDecimal.valueOf(100), "2021-01-01", "User1&…

    Java 2023年5月26日
    00
  • Spring Boot深入分析讲解日期时间处理

    Spring Boot深入分析讲解日期时间处理 导言 在Spring Boot应用中,常常需要处理日期时间。本文将介绍Java针对日期时间的处理方式,并重点介绍了Spring Boot提供的日期时间处理方式。 Java日期时间处理 Java提供了两套日期时间处理方式: java.util.Date和java.util.Calendar java.time提供…

    Java 2023年5月20日
    00
  • SpringBoot热重启配置详解

    Spring Boot热重启是指在开发过程中,修改代码后无需手动重启应用程序,而是自动重新加载修改后的代码并更新应用程序。这大大提高了开发效率。下面是Spring Boot热重启的配置详解: 1. 使用Spring Boot DevTools实现热重启 Spring Boot DevTools是Spring Boot提供的一个开发工具,其中包含了热重启功能。…

    Java 2023年5月14日
    00
  • java控制台实现聊天程序

    要实现Java控制台的聊天程序,需要用到Socket编程以及多线程编程。 以下为实现步骤: 步骤一:建立连接 在客户端和服务端之间建立连接需要使用Socket编程。在客户端中创建一个Socket对象,指定连接的IP地址和端口号,然后发送连接请求。在服务端中创建一个ServerSocket对象,并指定端口号,然后等待客户端的连接请求,如果有客户端请求连接,则建…

    Java 2023年5月24日
    00
  • 教你用JAVA写文本编辑器(一)

    “教你用JAVA写文本编辑器(一)”这篇文章主要是为初学者介绍如何用JAVA语言编写一个简单的文本编辑器程序。整篇文章介绍了搭建开发环境、项目创建及代码实现等过程,并给出了一个简单的示例。下面是该攻略的详细内容: 搭建开发环境 在开始编写JAVA文本编辑器程序之前,我们需要先搭建好JAVA开发环境。这里我们用的是Eclipse(也可以使用其他的JAVA集成开…

    Java 2023年5月19日
    00
  • Java Scanner用法案例详解

    Java Scanner用法案例详解 什么是Scanner类 Scanner类是一个标准的Java类,位于java.util包中。它提供了一种方便而且简单的方式用于读取用户输入的数据,例如,从键盘上读取数据。 Scanner类构造方法 Scanner类有以下几种构造方法: Scanner(File source):用于读取文件。 Scanner(InputS…

    Java 2023年5月26日
    00
  • Java编程实现数组转成list及list转数组的方法

    Java编程实现数组转成list及list转数组的方法 在Java编程中,我们经常需要将数组和List之间进行转换。下面是将数组转换成List和将List转换成数组的方法: 将数组转换成List 使用Arrays.asList(Object[] array) 可以使用Arrays.asList()方法将数组转换成List。代码示例如下: // 定义一个数组 …

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