在日常数据处理中,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);
}
}
}
关键代码解析:
workbook.loadfromfile("input.xlsx"):加载待处理的 excel 文件。workbook.getworksheets().getcount():获取工作表的总数。workbook.getworksheets().get(i):获取指定索引的工作表。newwb.getworksheets().addcopy():将原始工作表复制到新创建的workbook对象中。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));
}
}
}
关键代码解析:
sheet.getrows():获取源工作表的指定行。sheet.copyrow():将刚才获取到的行复制到新的工作表中。- 循环遍历源工作表,每次复制
rowspersheet行的数据(包括标题行)到一个新的工作簿中。 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();
}
}
关键代码解析:
worksheet.getcolumns():获取源工作表的指定列。worksheet.copycolumn():将获取到的列复制到新的工作表中。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教程的资料请关注代码网其它相关文章!
发表评论