Java Excel导入导出详解

一、Excel文件简介

Excel是微软公司开发的一种电子表格程序,多用于商业、财务、科学等各种数据处理。

Excel文件通常以.xls或.xlsx格式存储,其中.xls格式为Excel 97-2003格式文件,后缀名为.xls,而.xlsx格式兼容Excel 2007及以上版本,后缀名为.xlsx。Excel文件能够存储大量的数据,并进行数据的编辑、排序、筛选、统计等操作。

二、Java读取Excel文件

Java读取Excel文件通常使用Apache POI组件,在使用之前需要引入以下依赖:

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

首先需要创建一个Workbook对象,然后通过它获取Sheet对象,在通过Sheet对象获取Row和Cell对象,最后读取单元格数据。

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcelDemo {
    public static void main(String[] args) throws Exception {
        File file = new File("demo.xlsx");
        InputStream is = new FileInputStream(file);
        Workbook workbook = new XSSFWorkbook(is);
        Sheet sheet = workbook.getSheetAt(0);
        for (Row row : sheet) {
            for (Cell cell : row) {
                System.out.print(cell.getStringCellValue() + "\t");
            }
            System.out.println();
        }
        is.close();
    }
}

该示例中读取了一个名为demo.xlsx的文件,获取第一个Sheet并遍历所有单元格,通过getCellType()方法获取单元格的类型来读取数据。在读取完成后需关闭输入流。

三、Java写入Excel文件

Java写入Excel文件同样需要使用Apache POI组件,在使用之前也需要引入相关依赖。以下示例演示如何创建Excel文件并写入数据:

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class WriteExcelDemo {
    public static void main(String[] args) throws Exception {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");
        Row titleRow = sheet.createRow(0);
        Cell titleCell = titleRow.createCell(0);
        titleCell.setCellValue("标题");
        Row dataRow = sheet.createRow(1);
        Cell dataCell = dataRow.createCell(0);
        dataCell.setCellValue(new Date().toString());
        OutputStream os = new FileOutputStream("demo.xlsx");
        workbook.write(os);
        os.close();
    }
}

该示例中创建了一个Workbook对象,通过createSheet()方法创建了一个名为Sheet1的Sheet对象,并通过createRow()方法创建了标题行和数据行,再通过setCellValue()方法设置单元格数据,最后通过FileOutputStream将数据写入文件。

四、Java处理Excel文件

Java处理Excel文件还有很多其他的操作,例如合并单元格、设置字体、设置边框等等。以下示例演示了如何将数据导出到Excel文件并设置标题行的样式:

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.BorderFormatting;
import org.apache.poi.ss.usermodel.BorderSide;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelDemo {
    public static void main(String[] args) throws Exception {
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");
        Row titleRow = sheet.createRow(0);
        CellStyle titleStyle = workbook.createCellStyle();
        titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        XSSFFont font = ((XSSFWorkbook) workbook).createFont();
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        font.setFontHeightInPoints((short) 16);
        titleStyle.setFont(font);
        for (int i = 0; i < 3; i++) {
            Cell titleCell = titleRow.createCell(i);
            titleCell.setCellValue("标题" + i);
            titleCell.setCellStyle(titleStyle);
            sheet.setColumnWidth(i, 8000);
        }
        for (int i = 1; i < 4; i++) {
            Row dataRow = sheet.createRow(i);
            for (int j = 0; j < 3; j++) {
                Cell dataCell = dataRow.createCell(j);
                dataCell.setCellValue(new Date().toString());
                sheet.setColumnWidth(j, 6000);
                CellStyle dataStyle = workbook.createCellStyle();
                dataStyle.setBorderTop(BorderFormatting.BORDER_THIN);
                dataStyle.setBorderBottom(BorderFormatting.BORDER_THIN);
                dataStyle.setBorderLeft(BorderFormatting.BORDER_THIN);
                dataStyle.setBorderRight(BorderFormatting.BORDER_THIN);
                dataCell.setCellStyle(dataStyle);
            }
        }
        OutputStream os = new FileOutputStream("demo.xlsx");
        workbook.write(os);
        os.close();
    }
}

该示例中设置了标题行的对齐方式、字体大小、边框样式,并对各列的宽度进行了设置。同时也设置了数据行的边框样式,并在写入文件前关闭了输出流。

五、小结

本文详细介绍了Java读取、写入和处理Excel文件的方式,并给出了相应的代码示例,希望能够对使用Java操作Excel文件的开发者们有所帮助。

原创文章,作者:VLDCM,如若转载,请注明出处:https://www.506064.com/n/372888.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
VLDCMVLDCM
上一篇 2025-04-25 15:26
下一篇 2025-04-25 15:26

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29
  • Java 8 Group By 会影响排序吗?

    是的,Java 8中的Group By会对排序产生影响。本文将从多个方面探讨Group By对排序的影响。 一、Group By的概述 Group By是SQL中的一种常见操作,它…

    编程 2025-04-29

发表回复

登录后才能评论