首页 > 基础资料 博客日记

javaExcel 操作工具类(ExcelUtils)

2024-11-06 03:00:07基础资料围观26

这篇文章介绍了javaExcel 操作工具类(ExcelUtils),分享给大家做个参考,收藏Java资料网收获更多编程知识

场景

  JavaExcel操作工具类(ExcelUtils)可以在以下场景中发挥作用:
  1. 数据导入:可以将Excel文件中的数据导入到Java应用程序中。例如,可以将Excel中的学生信息导入到学生管理系统中,或者将Excel中的销售数据导入到库存管理系统中。

  2. 数据导出:可以将Java应用程序中的数据导出到Excel文件中。例如,可以将某个数据库查询的结果导出为Excel文件,方便用户查看和分析数据。

  3. 数据转换:可以将Excel文件中的数据转换为Java对象,并在Java应用程序中进行进一步的处理和分析。例如,可以将Excel中的员工信息转换为Employee对象,并进行各种业务操作。

  4. 数据校验:可以对Excel文件中的数据进行校验,以确保数据的准确性和完整性。例如,可以检查Excel中的日期格式、数字格式、数据范围等是否符合要求,并提供相应的错误提示。

  5. 数据操作:可以对Excel文件中的数据进行增删改操作。例如,可以在Excel中添加新的数据、更新已有的数据或删除不需要的数据。

通过使用ExcelUtils工具类,开发人员可以方便地处理Excel文件,进行数据的导入、导出、转换、校验和操作,提高开发效率和代码的可读性。同时,ExcelUtils还可以提供一些常用的辅助方法,如获取Excel文件中的sheet列表、获取特定单元格的值、设置单元格的样式等,使得操作更加灵活和便捷。JavaExcel操作工具类(ExcelUtils)可以在以下场景中发挥作用:

  1. 数据导入:可以将Excel文件中的数据导入到Java应用程序中。例如,可以将Excel中的学生信息导入到学生管理系统中,或者将Excel中的销售数据导入到库存管理系统中。

  2. 数据导出:可以将Java应用程序中的数据导出到Excel文件中。例如,可以将某个数据库查询的结果导出为Excel文件,方便用户查看和分析数据。

  3. 数据转换:可以将Excel文件中的数据转换为Java对象,并在Java应用程序中进行进一步的处理和分析。例如,可以将Excel中的员工信息转换为Employee对象,并进行各种业务操作。

  4. 数据校验:可以对Excel文件中的数据进行校验,以确保数据的准确性和完整性。例如,可以检查Excel中的日期格式、数字格式、数据范围等是否符合要求,并提供相应的错误提示。

  5. 数据操作:可以对Excel文件中的数据进行增删改操作。例如,可以在Excel中添加新的数据、更新已有的数据或删除不需要的数据。

通过使用ExcelUtils工具类,开发人员可以方便地处理Excel文件,进行数据的导入、导出、转换、校验和操作,提高开发效率和代码的可读性。同时,ExcelUtils还可以提供一些常用的辅助方法,如获取Excel文件中的sheet列表、获取特定单元格的值、设置单元格的样式等,使得操作更加灵活和便捷。

ExcelUtils依赖

首先,确保引入 Apache POI 依赖库,可以在 Maven 项目中的 pom.xml 文件中添加以下依赖:

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

ExcelUtils 工具类实现

package com.example.utils;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * ExcelUtils 工具类
 * 提供 Excel 文件的读写操作方法
 */
public class ExcelUtils {

    /**
     * 读取 Excel 文件中的所有数据
     *
     * @param filePath Excel 文件路径
     * @return 包含所有行数据的列表,每行是一个 String 数组
     * @throws IOException 文件读写异常
     */
    public static List<String[]> readExcel(String filePath) throws IOException {
        List<String[]> dataList = new ArrayList<>();
        try (FileInputStream fis = new FileInputStream(filePath);
             Workbook workbook = new XSSFWorkbook(fis)) {

            Sheet sheet = workbook.getSheetAt(0); // 读取第一个工作表
            for (Row row : sheet) {
                int lastCellNum = row.getLastCellNum();
                String[] rowData = new String[lastCellNum];
                for (int i = 0; i < lastCellNum; i++) {
                    Cell cell = row.getCell(i);
                    rowData[i] = getCellValueAsString(cell);
                }
                dataList.add(rowData);
            }
        }
        return dataList;
    }

    /**
     * 将数据写入 Excel 文件
     *
     * @param filePath Excel 文件路径
     * @param data     要写入的数据,每行是一个 String 数组
     * @throws IOException 文件读写异常
     */
    public static void writeExcel(String filePath, List<String[]> data) throws IOException {
        try (Workbook workbook = new XSSFWorkbook()) {
            Sheet sheet = workbook.createSheet("Sheet1"); // 创建一个新工作表
            for (int rowIndex = 0; rowIndex < data.size(); rowIndex++) {
                Row row = sheet.createRow(rowIndex);
                String[] rowData = data.get(rowIndex);
                for (int colIndex = 0; colIndex < rowData.length; colIndex++) {
                    Cell cell = row.createCell(colIndex);
                    cell.setCellValue(rowData[colIndex]);
                }
            }
            try (FileOutputStream fos = new FileOutputStream(filePath)) {
                workbook.write(fos);
            }
        }
    }

    /**
     * 读取指定单元格的值
     *
     * @param filePath Excel 文件路径
     * @param sheetIndex 工作表索引,从 0 开始
     * @param rowIndex 行索引,从 0 开始
     * @param colIndex 列索引,从 0 开始
     * @return 单元格的值,以字符串形式返回
     * @throws IOException 文件读写异常
     */
    public static String readCell(String filePath, int sheetIndex, int rowIndex, int colIndex) throws IOException {
        try (FileInputStream fis = new FileInputStream(filePath);
             Workbook workbook = new XSSFWorkbook(fis)) {

            Sheet sheet = workbook.getSheetAt(sheetIndex);
            Row row = sheet.getRow(rowIndex);
            if (row != null) {
                Cell cell = row.getCell(colIndex);
                return getCellValueAsString(cell);
            }
            return null;
        }
    }

    /**
     * 设置指定单元格的值
     *
     * @param filePath Excel 文件路径
     * @param sheetIndex 工作表索引,从 0 开始
     * @param rowIndex 行索引,从 0 开始
     * @param colIndex 列索引,从 0 开始
     * @param value 要设置的值
     * @throws IOException 文件读写异常
     */
    public static void writeCell(String filePath, int sheetIndex, int rowIndex, int colIndex, String value) throws IOException {
        try (FileInputStream fis = new FileInputStream(filePath);
             Workbook workbook = new XSSFWorkbook(fis)) {

            Sheet sheet = workbook.getSheetAt(sheetIndex);
            Row row = sheet.getRow(rowIndex);
            if (row == null) {
                row = sheet.createRow(rowIndex);
            }
            Cell cell = row.getCell(colIndex);
            if (cell == null) {
                cell = row.createCell(colIndex);
            }
            cell.setCellValue(value);

            try (FileOutputStream fos = new FileOutputStream(filePath)) {
                workbook.write(fos);
            }
        }
    }

    /**
     * 获取单元格的字符串值
     *
     * @param cell 单元格对象
     * @return 单元格的字符串值
     */
    private static String getCellValueAsString(Cell cell) {
        if (cell == null) {
            return "";
        }
        switch (cell.getCellType()) {
            case STRING:
                return cell.getStringCellValue();
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    return cell.getDateCellValue().toString();
                } else {
                    return Double.toString(cell.getNumericCellValue());
                }
            case BOOLEAN:
                return Boolean.toString(cell.getBooleanCellValue());
            case FORMULA:
                return cell.getCellFormula();
            case BLANK:
                return "";
            default:
                return cell.toString();
        }
    }

    /**
     * 创建新工作表并写入数据
     *
     * @param filePath Excel 文件路径
     * @param sheetName 工作表名称
     * @param data 要写入的数据,每行是一个 String 数组
     * @throws IOException 文件读写异常
     */
    public static void createSheetWithData(String filePath, String sheetName, List<String[]> data) throws IOException {
        try (FileInputStream fis = new FileInputStream(filePath);
             Workbook workbook = new XSSFWorkbook(fis)) {

            Sheet sheet = workbook.createSheet(sheetName);
            for (int rowIndex = 0; rowIndex < data.size(); rowIndex++) {
                Row row = sheet.createRow(rowIndex);
                String[] rowData = data.get(rowIndex);
                for (int colIndex = 0; colIndex < rowData.length; colIndex++) {
                    Cell cell = row.createCell(colIndex);
                    cell.setCellValue(rowData[colIndex]);
                }
            }

            try (FileOutputStream fos = new FileOutputStream(filePath)) {
                workbook.write(fos);
            }
        }
    }
}

主要功能简介

  1. 读取 Excel 文件

    • readExcel:读取 Excel 文件中的所有数据,返回一个包含每行数据的 List<String[]>
  2. 写入 Excel 文件

    • writeExcel:将数据写入 Excel 文件中,以新工作簿的形式写入。
  3. 读取指定单元格

    • readCell:读取 Excel 中指定单元格的值,返回字符串格式。
  4. 设置指定单元格值

    • writeCell:设置 Excel 中指定单元格的值,保存对文件的修改。
  5. 创建新工作表并写入数据

    • createSheetWithData:在已有的 Excel 文件中创建一个新工作表,并写入数据。

使用示例

import com.example.utils.ExcelUtils;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class ExcelUtilsTest {
    public static void main(String[] args) {
        String filePath = "test.xlsx";

        // 写入数据到 Excel
        List<String[]> data = Arrays.asList(
                new String[]{"Name", "Age", "City"},
                new String[]{"Alice", "30", "New York"},
                new String[]{"Bob", "25", "Los Angeles"},
                new String[]{"Charlie", "35", "Chicago"}
        );

        try {
            ExcelUtils.writeExcel(filePath, data);
            System.out.println("Data written to Excel file successfully.");

            // 读取数据从 Excel
            List<String[]> readData = ExcelUtils.readExcel(filePath);
            for (String[] row : readData) {
                System.out.println(Arrays.toString(row));
            }

            // 读取指定单元格
            String cellValue = ExcelUtils.readCell(filePath, 0, 1, 1);
            System.out.println("Cell Value at (1,1): " + cellValue);

            // 写入指定单元格
            ExcelUtils.writeCell(filePath, 0, 1, 1, "28");
            System.out.println("Cell Value at (1,1) updated.");

            // 创建新工作表并写入数据
            ExcelUtils.createSheetWithData(filePath, "NewSheet", data);
            System.out.println("New sheet

 created with data.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

结论

ExcelUtils 工具类通过封装 Apache POI 提供的 Excel 操作功能,简化了 Excel 文件的读写操作。无论是读取整个表格的数据、操作单个单元格,还是创建新工作表,这些方法都能大大提高开发效率和代码可读性。ExcelUtils 对于处理日常 Excel 文件操作非常有用,是一个便捷且功能全面的工具类。在项目中使用时,只需引入 Apache POI 依赖,即可在各种场景下轻松操作 Excel 文件。

总结

ExcelUtils 是一个 Java 的操作 Excel 的工具类。它提供了一些方法来读写 Excel 文件,方便对 Excel 文件进行操作。

该工具类主要包含以下方法:

readExcel():用于读取 Excel 文件,将文件中的数据转化为一个二维数组。
writeExcel():用于写入数据到 Excel 文件,将二维数组中的数据写入到指定的单元格中。
createExcel():用于创建一个新的 Excel 文件,并可以设置文件的名称和文件路径。
getCellData():用于获取指定单元格的数据,可以通过指定行和列的索引来获取。
setCellData():用于设置指定单元格的数据,可以通过指定行和列的索引来设置。
使用 ExcelUtils 可以方便地读取、写入和创建 Excel 文件。可以通过调用相关的方法来实现对 Excel 文件的操作。

该工具类还提供了一些其他的方法,如获取 Excel 文件的行数和列数,设置单元格的格式等。


文章来源:https://blog.csdn.net/Flying_Fish_roe/article/details/142688615
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云