Java使用Spire.XLS for Java拆分Excel的實戰(zhàn)教程
在日常數(shù)據(jù)處理中,Excel 文件承載著海量信息。然而,面對包含多工作表、超長行數(shù)或需要按特定列進(jìn)行分類的巨型 Excel 文件時,手動拆分無疑是一場噩夢,效率低下且容易出錯。作為開發(fā)者,我們追求自動化和效率。本文將深入探討如何利用 Java 強(qiáng)大的編程能力,結(jié)合 Spire.XLS for Java 庫,高效、精準(zhǔn)地完成 Excel 文件的拆分任務(wù),讓數(shù)據(jù)處理變得輕而易舉。無論您是需要將一個 Excel 文件按工作表拆分為多個獨立文件,還是需要將一個工作表按行或按列拆分成更小的單元,本教程都將為您提供清晰、可操作的解決方案。
一、Spire.XLS for Java 簡介與環(huán)境配置
Spire.XLS for Java 是一個功能全面、高性能的 Java Excel API,允許開發(fā)者在 Java 應(yīng)用程序中創(chuàng)建、讀取、編輯、轉(zhuǎn)換和打印 Excel 文件。它支持多種 Excel 格式(XLS、XLSX、CSV、ODS 等),提供了豐富的特性,包括但不限于單元格操作、樣式設(shè)置、圖表、數(shù)據(jù)透 視表、公式計算等。對于 Excel 拆分這種常見的自動化需求,Spire.XLS for Java 提供了直觀且強(qiáng)大的 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) {
// 創(chuàng)建 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();
// 刪除默認(rèn)工作表
newWb.getWorksheets().clear();
// 將源文檔中的指定工作表復(fù)制到新的 Workbook
newWb.getWorksheets().addCopy(wb.getWorksheets().get(i));
// 獲取工作表表名
sheetName = wb.getWorksheets().get(i).getName();
// 將新的 Workbook 保存為 Excel 文檔
newWb.saveToFile(folderPath + sheetName + ".xlsx", FileFormat.Version2013);
}
}
}
關(guān)鍵代碼解析:
workbook.loadFromFile("input.xlsx"):加載待處理的 Excel 文件。workbook.getWorksheets().getCount():獲取工作表的總數(shù)。workbook.getWorksheets().get(i):獲取指定索引的工作表。newWb.getWorksheets().addCopy():將原始工作表復(fù)制到新創(chuàng)建的Workbook對象中。newWorkbook.saveToFile(outputFileName):將包含單個工作表的新工作簿保存為獨立文件。
三、按行拆分 Excel 工作表
當(dāng)單個工作表數(shù)據(jù)量過大時,我們可能需要將其按行數(shù)或特定條件拆分成多個工作表或新的 Excel 文件。這里演示按固定行數(shù)拆分。
import com.spire.xls.*;
import java.util.EnumSet;
public class spiltexcel {
public static void main(String[] args) {
// 設(shè)置文件的輸入和輸出路徑
String sourceFile = "/input/世界各洲人口前十國家.xlsx";
String folderPath = "/output/";
// 創(chuàng)建一個 Workbook 類的對象并加載 Excel 文件
Workbook workbook = new Workbook();
workbook.loadFromFile(sourceFile);
// 獲取源文件的第一個工作表
Worksheet sheet = workbook.getWorksheets().get(0);
// 創(chuàng)建新的工作簿作為目標(biāo)文件并清除默認(rèn)工作表
Workbook newWorkbook1 = new Workbook();
newWorkbook1.getWorksheets().clear();
// 在目標(biāo)文件新增一個工作表
Worksheet newSheet1 = newWorkbook1.getWorksheets().add("Sheet1");
// 將源文件第一個工作表的第1-5行復(fù)制到目標(biāo)文件中
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);
// 創(chuàng)建新的工作簿作為目標(biāo)文件 2 并清除默認(rèn)工作表
Workbook newWorkbook2 = new Workbook();
newWorkbook2.getWorksheets().clear();
// 在目標(biāo)文件 2 新增一個工作表
Worksheet newSheet2 = newWorkbook2.getWorksheets().add("Sheet1");
int destRow2 = 1;
// 復(fù)制表頭
sheet.copyRow(sheet.getRows()[0], newSheet2, destRow2++, EnumSet.of(CopyRangeOptions.All));
// 將源文件第一個工作表的第6-10行復(fù)制到目標(biāo)文件中
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));
}
}
}
關(guān)鍵代碼解析:
sheet.getRows():獲取源工作表的指定行。sheet.copyRow():將剛才獲取到的行復(fù)制到新的工作表中。- 循環(huán)遍歷源工作表,每次復(fù)制
rowsPerSheet行的數(shù)據(jù)(包括標(biāo)題行)到一個新的工作簿中。 saveToFile():保存修改后的 Excel 文件。
四、按列拆分 Excel 工作表
除了按行拆分,有時我們還需要將一個工作表按列拆分成多個文件,例如將原始數(shù)據(jù)按某些關(guān)鍵列進(jìn)行分組。這里演示按固定列數(shù)拆分。
import com.spire.xls.*;
import java.util.EnumSet;
public class SplitExcel {
public static void main(String[] args) {
// 創(chuàng)建 Workbook 對象并加載 Excel 文件
Workbook workbook = new Workbook();
workbook.loadFromFile("/input/世界各洲人口前十國家.xlsx");
// 獲取原始(第一個)工作表
Worksheet worksheet = workbook.getWorksheets().get(0);
// 指定生成的 Excel 文件的文件夾路徑
String folderPath = "/output/";
// 創(chuàng)建新的 Workbook,刪除默認(rèn)工作表并添加新的工作表
Workbook newWorkbook1 = new Workbook();
newWorkbook1.getWorksheets().clear();
Worksheet newWorksheet1 = newWorkbook1.getWorksheets().add("Sheet1");
// 從原始工作表復(fù)制第 1-2 列到新工作表
for (int i = 1; i <= 2; i++) {
// 參數(shù):源列,目標(biāo)表,目標(biāo)起始列索引,復(fù)制選項
worksheet.copyColumn(worksheet.getColumns()[i - 1], newWorksheet1, newWorksheet1.getLastDataColumn() + 1, EnumSet.of(CopyRangeOptions.All));
}
// 復(fù)制行高以保持樣式一致
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();
// 創(chuàng)建新的 Workbook,刪除默認(rèn)工作表并添加新的工作表
Workbook newWorkbook2 = new Workbook();
newWorkbook2.getWorksheets().clear();
Worksheet newWorksheet2 = newWorkbook2.getWorksheets().add("Sheet1");
// 從原始工作表復(fù)制第 3-4 列到新工作表
for (int i = 3; i <= 4; i++) {
worksheet.copyColumn(worksheet.getColumns()[i - 1], newWorksheet2, newWorksheet2.getLastDataColumn() + 1, EnumSet.of(CopyRangeOptions.All));
}
// 復(fù)制行高
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();
}
}
關(guān)鍵代碼解析:
worksheet.getColumns():獲取源工作表的指定列。worksheet.copyColumn():將獲取到的列復(fù)制到新的工作表中。saveToFile()保存修改后的 Excel 文件。
五、結(jié)語
通過本文的詳細(xì)教程,我們深入了解了如何利用 Spire.XLS for Java 庫在 Java 應(yīng)用程序中高效地拆分 Excel 文件。無論是按工作表、按行還是按列進(jìn)行拆分,Spire.XLS for Java 都提供了簡潔而強(qiáng)大的 API,極大地簡化了復(fù)雜的 Excel 處理任務(wù)。它的高性能和豐富功能使其成為 Java 開發(fā)者處理 Excel 文件的理想選擇。希望這些示例代碼能幫助您在實際項目中實現(xiàn) Excel 自動化處理,提升工作效率。鼓勵大家嘗試探索 Spire.XLS for Java 的更多功能,發(fā)現(xiàn)它在數(shù)據(jù)處理領(lǐng)域的無限潛力!
以上就是Java使用Spire.XLS for Java拆分Excel的實戰(zhàn)教程的詳細(xì)內(nèi)容,更多關(guān)于Java拆分Excel教程的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java 重定義數(shù)組的實現(xiàn)方法(與VB的ReDim相像)
java 重定義數(shù)組的實現(xiàn)方法(與VB的ReDim相像),需要的朋友可以參考一下2013-04-04
Java調(diào)用打印機(jī)打印圖片和文本的多種方法
這篇文章主要介紹了在Java中調(diào)用打印機(jī)打印文本和圖片的多種方法,包括Java內(nèi)置的打印API、JavaPrintServiceAPI、ApachePDFBox庫、iText庫等,并提供了詳細(xì)的使用步驟和注意事項,需要的朋友可以參考下2026-01-01
Java調(diào)用騰訊云短信API接口的實現(xiàn)
這篇文章主要介紹了Java調(diào)用騰訊云短信API接口的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

