Java使用Spire.XLS for Java拆分Excel的实战教程

 更新时间:2026年02月03日 09:51:15   作者:用户033212666367  
在日常数据处理中,Excel文件承载着海量信息,然而,面对包含多工作表、超长行数或需要按特定列进行分类的巨型Excel文件时,手动拆分无疑是一场噩梦,本文将深入探讨如何利用Java强大的编程能力,结合Spire.XLS for Java库,高效、精准地完成Excel文件的拆分任务

在日常数据处理中,Excel 文件承载着海量信息。然而,面对包含多工作表、超长行数或需要按特定列进行分类的巨型 Excel 文件时,手动拆分无疑是一场噩梦,效率低下且容易出错。作为开发者,我们追求自动化和效率。本文将深入探讨如何利用 Java 强大的编程能力,结合 Spire.XLS for Java 库,高效、精准地完成 Excel 文件的拆分任务,让数据处理变得轻而易举。无论您是需要将一个 Excel 文件按工作表拆分为多个独立文件,还是需要将一个工作表按行或按列拆分成更小的单元,本教程都将为您提供清晰、可操作的解决方案。

一、Spire.XLS for Java 简介与环境配置

Spire.XLS for Java 是一个功能全面、高性能的 Java Excel API,允许开发者在 Java 应用程序中创建、读取、编辑、转换和打印 Excel 文件。它支持多种 Excel 格式(XLS、XLSX、CSV、ODS 等),提供了丰富的特性,包括但不限于单元格操作、样式设置、图表、数据透 视表、公式计算等。对于 Excel 拆分这种常见的自动化需求,Spire.XLS for Java 提供了直观且强大的 API 接口。

1. 安装依赖

要在您的 Java 项目中使用 Spire.XLS for Java,最便捷的方式是通过 Maven 添加其依赖。

Maven:

  <repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.xls</artifactId>
        <version>16.1.3</version>
    </dependency>
</dependencies>

将上述配置添加到您的 pom.xml 文件中,然后重新加载项目依赖即可。

二、按工作表拆分 Excel 文件

最常见的拆分需求是将一个包含多个工作表的 Excel 文件,拆分成多个独立的 Excel 文件,每个文件只包含原文件中的一个工作表。

import com.spire.xls.FileFormat;  
import com.spire.xls.Workbook;  
  
public class SplitExcel {  
  
    public static void main(String[] args) {  
  
        // 创建 Workbook 对象  
        Workbook wb = new Workbook();  
  
        // 加载 Excel 文档  
        wb.loadFromFile("/input/世界各洲人口前十国家.xlsx");  
  
        // 声明 Workbook 变量  
        Workbook newWb;  
  
        // 声明 String 类型变量  
        String sheetName;  
  
        // 指定拆分生成的文档的存放路径  
        String folderPath = "/output/按表拆分/";  
  
        // 遍历所有工作表  
        for (int i = 0; i < wb.getWorksheets().getCount(); i++) {  
  
            // 初始化 Workbook 对象  
            newWb = new Workbook();  
  
            // 删除默认工作表  
            newWb.getWorksheets().clear();  
  
            // 将源文档中的指定工作表复制到新的 Workbook  
            newWb.getWorksheets().addCopy(wb.getWorksheets().get(i));  
  
            // 获取工作表表名  
            sheetName = wb.getWorksheets().get(i).getName();  
  
            // 将新的 Workbook 保存为 Excel 文档  
            newWb.saveToFile(folderPath + sheetName + ".xlsx", FileFormat.Version2013);  
        }  
    }  
}

关键代码解析:

  1. workbook.loadFromFile("input.xlsx"):加载待处理的 Excel 文件。
  2. workbook.getWorksheets().getCount():获取工作表的总数。
  3. workbook.getWorksheets().get(i):获取指定索引的工作表。
  4. newWb.getWorksheets().addCopy():将原始工作表复制到新创建的 Workbook 对象中。
  5. newWorkbook.saveToFile(outputFileName):将包含单个工作表的新工作簿保存为独立文件。

三、按行拆分 Excel 工作表

当单个工作表数据量过大时,我们可能需要将其按行数或特定条件拆分成多个工作表或新的 Excel 文件。这里演示按固定行数拆分。

import com.spire.xls.*;  
import java.util.EnumSet;  
  
public class spiltexcel {  
    public static void main(String[] args) {  
        // 设置文件的输入和输出路径  
        String sourceFile = "/input/世界各洲人口前十国家.xlsx";  
        String folderPath = "/output/";  
  
        // 创建一个 Workbook 类的对象并加载 Excel 文件  
        Workbook workbook = new Workbook();  
        workbook.loadFromFile(sourceFile);  
        // 获取源文件的第一个工作表  
        Worksheet sheet = workbook.getWorksheets().get(0);  
  
        // 创建新的工作簿作为目标文件并清除默认工作表  
        Workbook newWorkbook1 = new Workbook();  
        newWorkbook1.getWorksheets().clear();  
        // 在目标文件新增一个工作表  
        Worksheet newSheet1 = newWorkbook1.getWorksheets().add("Sheet1");  
  
        // 将源文件第一个工作表的第1-5行复制到目标文件中  
        int destRow1 = 1;  
        for (int i = 0; i < 5; i++) {  
            sheet.copyRow(sheet.getRows()[i], newSheet1, destRow1++, EnumSet.of(CopyRangeOptions.All));  
        }  
        copyColumnWidths(sheet, newSheet1);  
        newWorkbook1.saveToFile(folderPath + "1-5行.xlsx", ExcelVersion.Version2016);  
  
        // 创建新的工作簿作为目标文件 2 并清除默认工作表  
        Workbook newWorkbook2 = new Workbook();  
        newWorkbook2.getWorksheets().clear();  
        // 在目标文件 2 新增一个工作表  
        Worksheet newSheet2 = newWorkbook2.getWorksheets().add("Sheet1");  
  
        int destRow2 = 1;  
        // 复制表头  
        sheet.copyRow(sheet.getRows()[0], newSheet2, destRow2++, EnumSet.of(CopyRangeOptions.All));  
  
        // 将源文件第一个工作表的第6-10行复制到目标文件中  
        for (int i = 5; i < 10; i++) {  
            sheet.copyRow(sheet.getRows()[i], newSheet2, destRow2++, EnumSet.of(CopyRangeOptions.All));  
        }  
        copyColumnWidths(sheet, newSheet2);  
        newWorkbook2.saveToFile(folderPath + "6-10行.xlsx", ExcelVersion.Version2016);  
    }  
  
    private static void copyColumnWidths(Worksheet source, Worksheet dest) {  
        for (int i = 0; i < source.getColumns().length; i++) {  
            dest.setColumnWidth(i + 1, source.getColumnWidth(i + 1));  
        }  
    }  
}

关键代码解析:

  1. sheet.getRows():获取源工作表的指定行。
  2. sheet.copyRow():将刚才获取到的行复制到新的工作表中。
  3. 循环遍历源工作表,每次复制 rowsPerSheet 行的数据(包括标题行)到一个新的工作簿中。
  4. saveToFile():保存修改后的 Excel 文件。

四、按列拆分 Excel 工作表

除了按行拆分,有时我们还需要将一个工作表按列拆分成多个文件,例如将原始数据按某些关键列进行分组。这里演示按固定列数拆分。

import com.spire.xls.*;  
import java.util.EnumSet;  
  
public class SplitExcel {  
    public static void main(String[] args) {  
        // 创建 Workbook 对象并加载 Excel 文件  
        Workbook workbook = new Workbook();  
        workbook.loadFromFile("/input/世界各洲人口前十国家.xlsx");  
  
        // 获取原始(第一个)工作表  
        Worksheet worksheet = workbook.getWorksheets().get(0);  
  
        // 指定生成的 Excel 文件的文件夹路径  
        String folderPath = "/output/";  
  
        // 创建新的 Workbook,删除默认工作表并添加新的工作表  
        Workbook newWorkbook1 = new Workbook();  
        newWorkbook1.getWorksheets().clear();  
        Worksheet newWorksheet1 = newWorkbook1.getWorksheets().add("Sheet1");  
  
        // 从原始工作表复制第 1-2 列到新工作表  
        for (int i = 1; i <= 2; i++) {  
            // 参数:源列,目标表,目标起始列索引,复制选项  
            worksheet.copyColumn(worksheet.getColumns()[i - 1], newWorksheet1, newWorksheet1.getLastDataColumn() + 1, EnumSet.of(CopyRangeOptions.All));  
        }  
        // 复制行高以保持样式一致  
        for (int i = 0; i < worksheet.getRows().length; i++) {  
            newWorksheet1.setRowHeight(i + 1, worksheet.getRowHeight(i + 1));  
        }  
        newWorkbook1.saveToFile(folderPath + "AB列.xlsx", ExcelVersion.Version2016);  
        newWorkbook1.dispose();  
  
        // 创建新的 Workbook,删除默认工作表并添加新的工作表  
        Workbook newWorkbook2 = new Workbook();  
        newWorkbook2.getWorksheets().clear();  
        Worksheet newWorksheet2 = newWorkbook2.getWorksheets().add("Sheet1");  
  
        // 从原始工作表复制第 3-4 列到新工作表  
        for (int i = 3; i <= 4; i++) {  
            worksheet.copyColumn(worksheet.getColumns()[i - 1], newWorksheet2, newWorksheet2.getLastDataColumn() + 1, EnumSet.of(CopyRangeOptions.All));  
        }  
        // 复制行高  
        for (int i = 0; i < worksheet.getRows().length; i++) {  
            newWorksheet2.setRowHeight(i + 1, worksheet.getRowHeight(i + 1));  
        }  
        newWorkbook2.saveToFile(folderPath + "CD列.xlsx", ExcelVersion.Version2016);  
        newWorkbook2.dispose();  
    }  
}

关键代码解析:

  1. worksheet.getColumns():获取源工作表的指定列。
  2. worksheet.copyColumn():将获取到的列复制到新的工作表中。
  3. saveToFile() 保存修改后的 Excel 文件。

五、结语

通过本文的详细教程,我们深入了解了如何利用 Spire.XLS for Java 库在 Java 应用程序中高效地拆分 Excel 文件。无论是按工作表、按行还是按列进行拆分,Spire.XLS for Java 都提供了简洁而强大的 API,极大地简化了复杂的 Excel 处理任务。它的高性能和丰富功能使其成为 Java 开发者处理 Excel 文件的理想选择。希望这些示例代码能帮助您在实际项目中实现 Excel 自动化处理,提升工作效率。鼓励大家尝试探索 Spire.XLS for Java 的更多功能,发现它在数据处理领域的无限潜力!

以上就是Java使用Spire.XLS for Java拆分Excel的实战教程的详细内容,更多关于Java拆分Excel教程的资料请关注脚本之家其它相关文章!

相关文章

  • 使用maven打包生成doc文档和打包源码

    使用maven打包生成doc文档和打包源码

    这篇文章主要介绍了使用maven打包生成doc文档和打包源码的实现,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java 压缩包解压实现代码

    Java 压缩包解压实现代码

    Java标准库(Java SE)提供了对ZIP格式的原生支持,通过java.util.zip包中的类来实现压缩和解压功能,本文将重点介绍如何使用Java来解压ZIP或RAR压缩包,感兴趣的朋友一起看看吧
    2025-05-05
  • Spring框架中​​RestTemplate的使用及说明

    Spring框架中​​RestTemplate的使用及说明

    本文详细介绍了Spring框架中RestTemplate的使用方法,包括基本概念、核心功能、常见用法、配置方式以及最佳实践,RestTemplate是用于同步访问RESTful服务的客户端工具类,适用于服务与服务之间的HTTP通信,文章还提供了代码示例,帮助读者全面掌握其使用
    2025-11-11
  • ShardingSphere-Proxy5搭建使用过程分析

    ShardingSphere-Proxy5搭建使用过程分析

    ShardingSphere-Proxy是跨语言的数据库代理服务端,主要用来处理:分表、分库、读写分离 等,这篇文章主要介绍了ShardingSphere-Proxy5搭建使用过程,需要的朋友可以参考下
    2022-10-10
  • Java算法之桶排序Bucket Sort详解

    Java算法之桶排序Bucket Sort详解

    这篇文章主要介绍了Java算法之桶排序Bucket Sort详解,桶排序(Bucket Sort)又称箱排序,是一种比较常用的排序算法,其算法原理是将数组分到有限数量的桶里,再对每个桶分别排好序,最后一次将每个桶中排好序的数输出,需要的朋友可以参考下
    2023-10-10
  • Java深入分析与解决Top-K问题

    Java深入分析与解决Top-K问题

    TopK问题即在N个数中找出最大的前K个,这篇文章将详细讲解三种方法解决TopK问题,文中代码具有一定参考价值,快跟随小编一起学习一下吧
    2022-04-04
  • java 重定义数组的实现方法(与VB的ReDim相像)

    java 重定义数组的实现方法(与VB的ReDim相像)

    java 重定义数组的实现方法(与VB的ReDim相像),需要的朋友可以参考一下
    2013-04-04
  • JAVA集合框架专题

    JAVA集合框架专题

    这篇文章主要介绍了JAVA集合框架的相关知识,文中讲解非常细致,帮助大家更好的理解学习JAVA框架,感兴趣的朋友快来了解下
    2020-06-06
  • Java调用打印机打印图片和文本的多种方法

    Java调用打印机打印图片和文本的多种方法

    这篇文章主要介绍了在Java中调用打印机打印文本和图片的多种方法,包括Java内置的打印API、JavaPrintServiceAPI、ApachePDFBox库、iText库等,并提供了详细的使用步骤和注意事项,需要的朋友可以参考下
    2026-01-01
  • Java调用腾讯云短信API接口的实现

    Java调用腾讯云短信API接口的实现

    这篇文章主要介绍了Java调用腾讯云短信API接口的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07

最新评论