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日

相关文章

  • 详解Java如何优雅的使用装饰器模式

    下面来详细讲解“详解Java如何优雅的使用装饰器模式”的完整攻略。 装饰器模式简介 装饰器模式(Decorator Pattern)是一种常用的设计模式,它允许将对象的行为在运行时更改,而无需修改其结构。这种模式是在不必改变原有对象的基础上,动态地给一个对象增加一些额外的职责。 如何使用装饰器模式 使用装饰器模式一般是通过创建一个抽象装饰者,然后通过继承该装…

    Java 2023年5月26日
    00
  • spring security与corsFilter冲突的解决方案

    对于Spring Security和CORS(跨来源资源共享)Filter的异军突起,可能是由于两者在处理跨域请求的方式不同而导致的。Spring Security需要进行身份验证和授权,而CORS Filter是一个基于Web的安全工具,它帮助Web应用程序实现跨域请求。这两者之间的冲突可能会导致无法登录或提供受限制的访问。 下面是解决此问题的步骤: 1.…

    Java 2023年5月20日
    00
  • tomcat logs 目录下各日志文件的解析(小结)

    tomcat logs 目录下各日志文件的解析(小结) Tomcat是一个流行的Web应用服务器,它会生成各种日志文件。在Tomcat logs 目录下,通常会有以下几类日志文件: catalina.out:Tomcat的控制台输出日志文件,包含了Tomcat启动时的各种信息。 localhost.<日期>.log:每个Web应用程序的日志文件,…

    Java 2023年6月2日
    00
  • Spring Security系列教程之会话管理处理会话过期问题

    Spring Security系列教程之会话管理处理会话过期问题 在使用Spring Security构建Web应用时,会话管理是非常重要的一部分。会话的过期问题也需要得到妥善的处理。本文将对Spring Security的会话管理流程进行详细讲解,并提供两条示例来说明如何处理会话过期问题。 会话管理流程 Spring Security的会话管理处理流程如下…

    Java 2023年5月20日
    00
  • Java安全之Tomcat6 Filter内存马问题

    Java安全之Tomcat6 Filter内存马问题完整攻略 背景 Tomcat是一个开放源代码的Web应用服务器,支持多种Web开发技术,包括Java Servlet、JavaServer Pages(JSP)和JavaServer Faces(JSF)等。然而,在使用Tomcat时,可能会存在一些安全问题,比如内存马问题。本篇攻略旨在详细介绍Tomcat…

    Java 2023年6月2日
    00
  • 什么是Java并发编程?

    什么是Java并发编程? Java并发编程是指在Java程序中使用多线程实现并发任务执行的一种编程方式。多线程实现可以充分发挥多核CPU的优势,提高程序的并发处理能力和性能。 Java中的并发编程常用类和接口 Thread:线程类,是Java中用于创建和管理线程的类。 Runnable:代表线程要执行的任务,可以作为Thread类的构造参数使用。 Lock:…

    Java 2023年5月11日
    00
  • SpringBoot 之启动流程详解

    SpringBoot 之启动流程详解 SpringBoot 是一个底层框架,它提供了很多简化开发过程的配置和工具。它最大的优势在于可以快速地构建和部署应用,无需手动配置大量参数,节省了开发人员大量时间。本文将详细讲解 SpringBoot 应用的启动流程,以帮助开发人员更好地理解和使用 SpringBoot。 1. SpringBoot 的核心模块 在了解 …

    Java 2023年5月19日
    00
  • JSON复杂数据处理之Json树形结构数据转Java对象并存储到数据库的实现

    下面是详细的攻略: JSON复杂数据处理之Json树形结构数据转Java对象并存储到数据库的实现 背景介绍 JSON是一种轻量级的数据交换格式,常用于Web应用中的数据传输。在实际开发中,我们常常需要将JSON数据转换为Java对象,并将这些对象存储到数据库中。而JSON数据可能比较复杂,包含嵌套的数据结构,如树形结构数据。因此,本篇攻略将介绍如何使用Jav…

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