java简单解析xls文件的方法示例【读取和写入】

Java简单解析XLS文件的方法示例:读取和写入

1. 概述

XLS是一种Microsoft Excel电子表格文件格式,是常见的办公文档,需要在Java程序中对其进行处理和解析。本文将介绍Java中读取和写入XLS文件的方法,包括使用Apache POI库读取和写入XLS文件。

2. 使用Apache POI库读取XLS文件

Apache POI是一款用于处理Microsoft Office格式文件的Java库。使用Apache POI读取XLS文件的基本步骤如下:

2.1 引入依赖

在Maven项目中要使用Apache POI,需要在pom.xml中添加以下依赖:

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

2.2 创建Workbook对象

首先需要创建一个Workbook对象,表示整个XLS文件,可以根据文件扩展名来判断使用哪种Workbook类型。例如,使用HSSFWorkbook类表示.xls文件,XSSFWorkbook类表示.xlsx文件。

FileInputStream fis = new FileInputStream(new File("test.xls"));
Workbook workbook = new HSSFWorkbook(fis); // 读取xls文件
// Workbook workbook = new XSSFWorkbook(fis); // 读取xlsx文件

2.3 读取Sheet

Workbook对象包含若干个Sheet对象,每个Sheet表示一个工作表。可以使用getSheet()方法获取Sheet对象。也可以通过Sheet对象的名称或索引获取相应的Sheet对象。

Sheet sheet = workbook.getSheetAt(0); // 获取第一个Sheet
// Sheet sheet = workbook.getSheet("Sheet1"); // 获取名称为"Sheet1"的Sheet

2.4 读取单元格数据

Sheet对象包含若干行和列,每个单元格表示一个交叉点。可以使用getRow()和getCell()方法获取相应的行和列。通过getCellType()方法可以判断单元格数据类型,例如字符串、数字、日期等。

Row row = sheet.getRow(0); // 获取第一行
Cell cell = row.getCell(0); // 获取第一个单元格
if (cell.getCellType() == CellType.STRING) {
    String value = cell.getStringCellValue();
    System.out.println(value);
} else if (cell.getCellType() == CellType.NUMERIC) {
    double value = cell.getNumericCellValue();
    System.out.println(value);
} else if (cell.getCellType() == CellType.BOOLEAN) {
    boolean value = cell.getBooleanCellValue();
    System.out.println(value);
}

3. 使用Apache POI库写入XLS文件

使用Apache POI写入XLS文件的基本步骤如下:

3.1 创建Workbook对象

同样需要创建一个Workbook对象,表示整个XLS文件。

Workbook workbook = new HSSFWorkbook(); // 创建xls文件
// Workbook workbook = new XSSFWorkbook(); // 创建xlsx文件

3.2 创建Sheet和Row对象

使用createSheet和createRow()方法创建Sheet和Row对象。

Sheet sheet = workbook.createSheet("Sheet1"); // 创建名称为"Sheet1"的Sheet
Row row = sheet.createRow(0); // 创建第一行

3.3 创建单元格并写入数据

使用createCell()方法创建单元格对象。通过setCellType()和setCellValue()方法设置数据类型和值。

Cell cell1 = row.createCell(0); // 创建第一个单元格
cell1.setCellType(CellType.STRING);
cell1.setCellValue("test");
// 或
Cell cell2 = row.createCell(1); // 创建第二个单元格
cell2.setCellValue(123.45);

3.4 保存文件

使用FileOutputStream和write()方法将Workbook对象写入到磁盘文件。

FileOutputStream fos = new FileOutputStream(new File("test.xls"));
workbook.write(fos);
fos.close();

4. 示例

4.1 读取XLS文件

test.xls文件内容如下:

A B C
1 test1 test2
2 test3 test4

Java代码如下:

import java.io.File;
import java.io.FileInputStream;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

public class ReadXlsFileExample {
    public static void main(String[] args) throws Exception {
        FileInputStream fis = new FileInputStream(new File("test.xls"));
        Workbook workbook = new HSSFWorkbook(fis);

        Sheet sheet = workbook.getSheetAt(0); // 获取第一个Sheet
        for (Row row : sheet) {
            for (Cell cell : row) {
                if (cell.getCellType() == CellType.STRING) {
                    String value = cell.getStringCellValue();
                    System.out.print(value);
                } else if (cell.getCellType() == CellType.NUMERIC) {
                    double value = cell.getNumericCellValue();
                    System.out.print(value);
                }
                System.out.print("\t"); // 每个单元格之间加一个制表符
            }
            System.out.println(); // 每行之间加一个换行符
        }

        fis.close();
    }
}

输出结果:

A   B   C   
1.0 test1   test2   
2.0 test3   test4   

4.2 写入XLS文件

Java代码如下:

import java.io.File;
import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

public class WriteXlsFileExample {
    public static void main(String[] args) throws Exception {
        Workbook workbook = new HSSFWorkbook(); // 创建xls文件

        Sheet sheet = workbook.createSheet("Sheet1"); // 创建名称为"Sheet1"的Sheet
        Row row = sheet.createRow(0); // 创建第一行

        Cell cell1 = row.createCell(0); // 创建第一个单元格
        cell1.setCellType(CellType.STRING);
        cell1.setCellValue("test1");

        Cell cell2 = row.createCell(1); // 创建第二个单元格
        cell2.setCellValue(123.45);

        FileOutputStream fos = new FileOutputStream(new File("test.xls"));
        workbook.write(fos);

        fos.close();
    }
}

生成的test.xls文件内容如下:

A B
test1 123.45

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java简单解析xls文件的方法示例【读取和写入】 - Python技术站

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

相关文章

  • springboot+thymeleaf打包成jar后找不到静态资源的坑及解决

    在使用Spring Boot和Thymeleaf开发Web应用程序时,我们可能会遇到打包成jar后找不到静态资源的问题。本文将详细介绍这个问题的原因和解决方法,并提供两个示例说明。 1. 问题原因 在Spring Boot应用程序中,静态资源通常存放在src/main/resources/static目录下。当我们使用Maven或Gradle将应用程序打包成…

    Java 2023年5月18日
    00
  • springboot 整合 sa-token简介及入门教程

    【标题】springboot 整合 sa-token简介及入门教程 【简介】本文将介绍SpringBoot如何整合sa-token进行权限控制,通过本文的学习,读者可以轻松入门sa-token,并使用sa-token在SpringBoot项目中实现控制权限的功能。 【内容】 1. 什么是 sa-token sa-token 是面向对象的轻量级Java权限认证…

    Java 2023年6月1日
    00
  • 分布式医疗挂号系统SpringCache与Redis为数据字典添加缓存

    接下来我将为您详细讲解“分布式医疗挂号系统SpringCache与Redis为数据字典添加缓存”的完整攻略。 简介 分布式医疗挂号系统是一种可以为病人提供在线挂号、医生排队、诊断和用药等创新医疗系统。在此系统中,我们照常将业务逻辑和数据库中已缓存的数据保留存储,以便我们能够快速存取数据并提高网站的访问速度。这就需要我们利用缓存技术为数据字典添加缓存。这里将演…

    Java 2023年5月19日
    00
  • android apk反编译到java源码的实现方法

    要将Android APK 反编译成 Java 源码,我们需要使用 apktool 工具和 jd-GUI 工具。 环境准备 安装 JDK 和 Android SDK 下载 apktool 工具,可在 https://ibotpeaches.github.io/Apktool/ 下载最新版本 下载 jd-GUI 工具,可在 https://github.com…

    Java 2023年5月26日
    00
  • Java中高效判断数组中是否包含某个元素的几种方法

    下面来详细讲解Java中高效判断数组中是否包含某个元素的几种方法。 问题描述 在Java中的开发中经常需要判断一个数组中是否包含某个元素,这是一个非常常见的需求。但是在实践中,我们需要选择高效的方法来完成这个任务,以尽快地得到结果,提高程序的运行效率和响应速度。 方法一:使用循环判断 使用循环逐一遍历数组中的元素,对每个元素和目标元素进行比较,如果相同,则说…

    Java 2023年5月26日
    00
  • SpringBoot浅析安全管理之高级配置

    Spring Boot浅析安全管理之高级配置 Spring Boot提供了强大的安全管理功能,可以帮助开发人员保护应用程序的安全性。在本文中,我们将深入探讨Spring Boot安全管理的高级配置。 Spring Boot安全管理的基本概念 在Spring Boot中,安全管理是指保护应用程序的机制,以确保只有授权用户才能访问应用程序的资源。Spring B…

    Java 2023年5月15日
    00
  • 什么是EVB?EVB技术的简单介绍

    下面是关于EVB的详细讲解。 什么是EVB? EVB全称为Evaluation Board(评估板),是一种硬件开发工具,用于快速评估和开发不同种类的芯片、模块、传感器等硬件设备。它通常包括主板、外设接口、调试器等硬件和相关的软件开发工具。EVB与PCB(Printed Circuit Board,印刷电路板)相比,更注重快速原型和快速评估,能够快速搭建出一…

    Java 2023年6月15日
    00
  • C#如何从byte[]中直接读取Structure实例详解

    这里是一份完整的攻略,教你在 C# 中如何从 byte[] 中直接读取 Structure 实例。 什么是结构体(Structure) 结构体是 C# 中一种可自定义数据类型。可以将结构体看作是一种轻量级的类,它包含了一组相关的数据类型,可以通过单个变量进行访问和管理。每个结构体变量在内存中都是独立的。 如何从byte[]中直接读取Structure实例 由…

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