Java中按Sheet切分Excel文件的实现

在日常的工作中,我们经常需要处理Excel文件。这些文件通常包含多个Sheet,每个Sheet又可能包含大量的数据。为了更有效地管理和分析这些数据,有时需要将一个Excel文件根据Sheet划分成多个文件。在这篇文章中,我们将探讨如何使用Java来实现这一功能,并给出具体的代码示例。

一、项目准备

在开始代码实现之前,我们需要准备一些工具和库。我们将使用Apache POI,这是一个强大的Java库,用于处理Excel文件。首先,在你的项目中添加Apache POI的依赖,如下所示(如果你使用的是Maven):

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.2</version>
</dependency>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

二、流程图

下面是将Excel文件按Sheet切分成多个文件的流程图:

大于0 等于0 开始 读取Excel文件 获取Sheet数量 遍历每个Sheet 结束处理 创建新的Excel文件 写入当前Sheet的内容 保存新的Excel文件 完成

三、代码示例

接下来,我们将实现拔取Excel文件,并根据每个Sheet生成新的Excel文件的功能。以下是代码示例:

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

public class ExcelSplitter {
    public static void main(String[] args) {
        String filePath = "example.xlsx"; // 源Excel文件路径
        splitExcelBySheet(filePath);
    }
    
    public static void splitExcelBySheet(String filePath) {
        try (InputStream inp = new FileInputStream(filePath);
             Workbook workbook = WorkbookFactory.create(inp)) {
            
            int numberOfSheets = workbook.getNumberOfSheets();
            for (int i = 0; i < numberOfSheets; i++) {
                Sheet sheet = workbook.getSheetAt(i);
                createNewExcelFile(sheet, "Output_Sheet_" + (i + 1) + ".xlsx");
            }
            System.out.println("切分完成!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    private static void createNewExcelFile(Sheet sheet, String outputFileName) {
        Workbook newWorkbook = new XSSFWorkbook();
        Sheet newSheet = newWorkbook.createSheet(sheet.getSheetName());
        
        copySheetContent(sheet, newSheet);
        
        try (OutputStream fileOut = new FileOutputStream(outputFileName)) {
            newWorkbook.write(fileOut);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                newWorkbook.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private static void copySheetContent(Sheet source, Sheet destination) {
        for (int i = 0; i <= source.getLastRowNum(); i++) {
            Row sourceRow = source.getRow(i);
            Row newRow = destination.createRow(i);
            if (sourceRow != null) {
                for (int j = 0; j < sourceRow.getLastCellNum(); j++) {
                    Cell sourceCell = sourceRow.getCell(j);
                    Cell newCell = newRow.createCell(j);
                    if (sourceCell != null) {
                        newCell.setCellValue(sourceCell.toString());
                    }
                }
            }
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.

四、代码解析

上面的代码可以分为几个部分:

  1. 导入必要的库:我们使用Apache POI库来处理Excel文件。

  2. main方法:这是程序的入口,指定了源Excel文件的路径,并调用了splitExcelBySheet方法。

  3. splitExcelBySheet方法:它读取指定路径的Excel文件,获取Sheet的数量,并遍历每个Sheet。

  4. createNewExcelFile方法:为每个Sheet创建一个新的Excel文件,并调用copySheetContent将内容复制。

  5. copySheetContent方法:负责将原Sheet的内容逐行逐列复制到新的Sheet中。

五、总结

通过上述步骤,我们成功地将一个包含多个Sheet的Excel文件分割为多个单独的Excel文件。Apache POI库为我们提供了很好的工具,使得这个过程变得简单和高效。通过这种方式,你可以更加容易地处理和分析你的数据,而不必在一个庞大的Excel文件中苦苦寻找。

如果你有其他关于Java或Excel处理的问题,欢迎留言讨论!