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 Timer测试定时调用及固定时间执行代码示例

    “java Timer测试定时调用及固定时间执行代码示例”的完整攻略 简介 在 Java 中,我们可以使用 Timer 类来实现定时调用和延时执行代码的功能。在本文中,我们将会详细的介绍 Timer 类的使用方法,并且提供两个实例来演示它的应用。 Timer 类 Timer 类提供了一种简单的机制,用于重复或延迟执行任务。任务可以是 Runnable 接口的…

    Java 2023年5月20日
    00
  • Java Spring的使用注解开发详解

    Java Spring的使用注解开发详解 Java Spring是一个开源框架,它帮助Java开发人员开发企业级应用程序。Spring框架有多种模块,其中最流行的是Spring Core,它是Spring框架的核心部分,提供了依赖注入(DI)和面向切面编程(AOP)等重要功能。本文将详细讲解如何使用注解开发Java Spring应用程序。 环境准备 在开始使…

    Java 2023年5月19日
    00
  • Java任务定时执行器案例的实现

    下面我来详细讲解“Java任务定时执行器案例的实现”的完整攻略。 什么是Java任务定时执行器? 在Java中,我们经常需要定时执行一些任务,比如定时备份数据库、定时发送邮件等。而Java任务定时执行器就是用来进行这些定时任务的,它可以在指定的时间间隔内执行指定的任务。 Java任务定时执行器的实现方式 Java任务定时执行器有很多的实现方式,比如Timer…

    Java 2023年5月19日
    00
  • Java之JSP教程九大内置对象详解(下篇)

    针对“Java之JSP教程九大内置对象详解(下篇)”这篇文章,我来为您进行详细讲解。 首先,文章中提到的JSP九大内置对象包括:request、response、session、application、out、pageContext、config、page、exception。这些对象在JSP中可以直接调用,在编写JSP页面时非常常用。以下逐一进行介绍: r…

    Java 2023年5月26日
    00
  • 在JavaScript中调用Java类和接口的方法

    在JavaScript中调用Java类和接口的方法,一般需要通过Java的JavaScript引擎来实现。下面,我们将详细介绍调用Java类和接口方法的完整攻略。 步骤一:创建Java类和接口 为了在JavaScript中调用Java类和接口的方法,我们首先需要创建相应的Java类和接口。这里以Java类Calculator和Java接口Greeting为例…

    Java 2023年5月26日
    00
  • Java中Date日期时间类具体使用

    Java中Date日期时间类具体使用 在Java中,Date类是表示日期和时间的类。它是以毫秒为单位存储日期和时间的。Date类是Java中操作日期和时间最基本的类之一,下面我们来详细讲解一下关于Date类的使用。 1. 创建Date对象 Date对象可以通过无参构造方法创建,该方法将创建一个表示当前时间的Date对象。也可以通过给定时间戳的方式创建,表示从…

    Java 2023年5月20日
    00
  • 一文搞懂Spring中的JavaConfig

    一文搞懂Spring中的JavaConfig 前言 Spring框架是一个优秀的Java开源框架,作为企业级应用必不可少的技术栈之一。Spring提供了多种方式来为我们的应用程序提供依赖注入和控制反转的支持,。本文将介绍Spring的核心组件之一——JavaConfig,它是一种用Java编写Bean定义文件的方式,可以取代传统的XML配置方式,使配置更清晰…

    Java 2023年5月20日
    00
  • struts2入门Demo示例

    下面为你详细讲解“struts2入门Demo示例”的完整攻略: 环境搭建 首先,需要搭建Java环境和Tomcat服务器环境,并下载Struts2框架。这里以Windows环境下为例,具体步骤如下: 安装Java环境 下载JDK并进行安装,自定义安装目录。 配置环境变量JAVA_HOME,值为JDK安装目录路径,例如 C:\Program Files\Jav…

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