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日

相关文章

  • 一文带你了解Java中的Object类及类中方法

    一文带你了解Java中的Object类及类中方法 什么是Object类? 在Java中,所有的类都继承自Object类,Object类是Java中所有类的祖先类,其定义了所有类都有的基本方法。 Object类中的常用方法 equals()方法 equals()方法用于判断两个对象是否相等。如果两个对象的内容相同,equals方法返回true,否则返回fals…

    Java 2023年5月26日
    00
  • 部分网站允许空白referer的防盗链图片的js破解代码

    为了防止恶意网站站点盗取自己的资源,很多网站都会设置防盗链,限制只有自己网站的页面可以访问这些资源。其中一个最常用的防盗链方式是检测请求的referer字段,如果不符合条件则拒绝访问。referer字段记录了当前请求来源的URL地址,一般情况下只有在通过链接点击进入目标页面时referer才会非空。 而某些网站会允许访问者通过空referer字段访问一些资源…

    Java 2023年6月15日
    00
  • JGroups实现聊天小程序

    以下是关于使用JGroups实现聊天小程序的完整攻略,希望能够帮助您: JGroups实现聊天小程序 介绍 JGroups是一个用于构建群组应用程序的工具包,该工具包允许应用程序中的各个节点之间相互通信和协作。在本教程中,我们将使用JGroups构建一个简单的聊天应用程序。 准备工作 在开始构建JGroups聊天应用程序之前,我们需要首先安装Java和Mav…

    Java 2023年5月23日
    00
  • 一文探索Java文件读写更高效方式

    针对Java文件读写更高效方式的攻略,我可以提供以下内容: 1. 使用NIO NIO(New I/O),即为非阻塞 IO。相比于传统的 IO,它可以提供更高效的文件读写方式。其主要的类库为java.nio。使用NIO的关键是Buffer和Channel两个概念。其中Buffer为缓冲区,用来读写数据;Channel则代表数据源,如文件或网络连接,我们从Cha…

    Java 2023年5月20日
    00
  • Java基本语法笔记(菜鸟必看篇)

    Java基本语法笔记(菜鸟必看篇) 数据类型 Java 中的基本数据类型包括整型、浮点型、布尔型、字符型和字符串型,它们分别为 int、float、double、boolean、char 和 String 类型。 整型 整型又分为四种类型:byte、short、int、long,不同的类型占用的内存大小不同,范围也不同。 byte:占1个字节,范围是 -12…

    Java 2023年5月23日
    00
  • 微信小程序上传图片实例

    下面是详细的“微信小程序上传图片实例”的攻略。 前提条件 微信开发者工具 小程序已引入wx.request组件及相应的权限 上传图片所使用的后端接口已编写完成并提供相应的URL 第一步:页面代码实现 在小程序的页面中添加能够上传图片的功能,需要使用到小程序中的wx.chooseImage API,用于调用用户的相册或摄像头去选择图片或拍照,并将所选的图片保存…

    Java 2023年5月23日
    00
  • Spring整合MyBatis的三种方式

    Spring整合MyBatis的三种方式 在使用Spring整合MyBatis时,有三种常见的方式: 方式一:使用注解配置 方式二:使用XML配置 方式三:使用Java配置 接下来,将分别对这三种方式进行详细讲解。 方式一:使用注解配置 使用注解配置整合MyBatis非常简单,只需要在Spring配置文件中添加以下代码: <!– 配置MyBatis扫…

    Java 2023年5月19日
    00
  • 新浪java面试经历与感慨分享

    新浪Java面试经历与感慨分享 背景介绍 该经历来自一位Java开发者在新浪公司的面试经历,分享该经历希望能够帮助其他准备面试的开发者,提高他们的面试成功率。 面试前准备 为了顺利通过面试,个人认为主要需要做好以下几个准备: 1. 掌握基础知识 在面试中,基础知识是最重要的。需要熟悉Java核心技术,如集合、IO流等,在掌握基本语法的基础上,对Java底层原…

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