Java自動化實現(xiàn)在Excel工作表中創(chuàng)建、修改和刪除表格
在Java應(yīng)用中,我們經(jīng)常需要動態(tài)處理Excel里的表格。比如自動生成一個帶格式的數(shù)據(jù)報表,或者調(diào)整現(xiàn)有表格的范圍。使用Spire.XLS for Java,這幾行代碼就能搞定表格的創(chuàng)建、修改和刪除,讓繁瑣的手動操作徹底自動化。
1. 輕松創(chuàng)建 Excel 表格
在Excel中創(chuàng)建表格,不僅能使數(shù)據(jù)結(jié)構(gòu)化、易于閱讀,還能自動獲得篩選、排序、匯總等功能。使用Spire.XLS for Java,創(chuàng)建表格變得異常簡單。
Spire.XLS for Java 實現(xiàn)
創(chuàng)建表格的核心步驟是指定數(shù)據(jù)范圍,并為表格命名。我們還可以為表格應(yīng)用預(yù)設(shè)的樣式,使其外觀更專業(yè)。
代碼示例
import com.spire.xls.*;
import com.spire.xls.collections.IListObjects;
import com.spire.xls.core.IListObject;
public class CreateExcelTable {
public static void main(String[] args) {
// 1. 創(chuàng)建一個新的工作簿
Workbook workbook = new Workbook();
// 2. 獲取第一個工作表
Worksheet sheet = workbook.getWorksheets().get(0);
// 3. 填充一些示例數(shù)據(jù)
sheet.getCellRange("A1").setText("產(chǎn)品");
sheet.getCellRange("B1").setText("數(shù)量");
sheet.getCellRange("C1").setText("單價");
sheet.getCellRange("D1").setText("總價");
sheet.getCellRange("A2").setText("鍵盤");
sheet.getCellRange("B2").setNumberValue(10);
sheet.getCellRange("C2").setNumberValue(120.50);
sheet.getCellRange("D2").setFormula("=B2*C2"); // 使用公式
sheet.getCellRange("A3").setText("鼠標(biāo)");
sheet.getCellRange("B3").setNumberValue(20);
sheet.getCellRange("C3").setNumberValue(60.00);
sheet.getCellRange("D3").setFormula("=B3*C3");
// 4. 在指定數(shù)據(jù)區(qū)域創(chuàng)建表格,并命名為 "銷售數(shù)據(jù)表"
// 參數(shù)1: 表格名稱
// 參數(shù)2: 數(shù)據(jù)范圍
IListObject table = sheet.getListObjects().create("銷售數(shù)據(jù)表", sheet.getCellRange("A1:D3"));
// 5. 應(yīng)用內(nèi)置表格樣式(例如:淺色樣式9)
table.setBuiltInTableStyle(TableBuiltInStyles.TableStyleLight9);
// 6. 啟用篩選功能 (默認情況下表格會啟用)
table.setShowHeaderRow(true); // 顯示標(biāo)題行
table.setShowTotalsRow(false); // 默認不顯示匯總行
// 7. 保存工作簿
workbook.saveToFile("CreateExcelTable.xlsx", ExcelVersion.Version2016);
System.out.println("Excel表格 '銷售數(shù)據(jù)表' 已成功創(chuàng)建!");
}
}
關(guān)鍵點提示
sheet.getListObjects().create()方法是創(chuàng)建表格的核心,它允許你指定表格的名稱和數(shù)據(jù)范圍。setBuiltInTableStyle()可以為表格快速應(yīng)用Excel內(nèi)置的多種樣式,提升美觀度。setShowHeaderRow()和setShowTotalsRow()可以控制表格是否顯示標(biāo)題行和匯總行。
2. 靈活修改 Excel 表格
表格創(chuàng)建后,我們常常需要進行修改,例如添加新的數(shù)據(jù)行、更新現(xiàn)有數(shù)據(jù)、調(diào)整表格樣式,甚至添加匯總行等。
Spire.XLS for Java 實現(xiàn)
Spire.XLS for Java 提供了方便的API來訪問工作表中的現(xiàn)有表格對象,進而對其進行各種修改。
代碼示例
本例將演示如何向現(xiàn)有表格添加新行數(shù)據(jù),并啟用匯總行功能。
import com.spire.xls.*;
import com.spire.xls.core.IListObject;
public class ModifyExcelTable {
public static void main(String[] args) {
// 1. 加載一個包含表格的Excel文件
Workbook workbook = new Workbook();
workbook.loadFromFile("CreateExcelTable.xlsx"); // 使用上一步創(chuàng)建的文件
// 2. 獲取第一個工作表
Worksheet sheet = workbook.getWorksheets().get(0);
// 3. 獲取工作表中的第一個表格(通過索引或名稱)
IListObject table = sheet.getListObjects().get(0); // 假設(shè)只有一個表格
// 4. 添加新數(shù)據(jù)行到表格下方
int lastRow = table.getRange().getLastRow(); // 獲取表格當(dāng)前數(shù)據(jù)的最后一行
sheet.getCellRange("A" + (lastRow + 1)).setText("顯示器");
sheet.getCellRange("B" + (lastRow + 1)).setNumberValue(5);
sheet.getCellRange("C" + (lastRow + 1)).setNumberValue(800.00);
sheet.getCellRange("D" + (lastRow + 1)).setFormula("=B" + (lastRow + 1) + "*C" + (lastRow + 1));
// 5. 調(diào)整表格的數(shù)據(jù)范圍以包含新添加的行
// 注意:Spire.XLS會自動擴展表格區(qū)域以包含新增數(shù)據(jù),如果新增數(shù)據(jù)緊鄰表格下方。
// 但為了嚴謹性,也可以手動更新表格的Range,或通過添加ListRow的方式
// 示例:這里我們直接添加數(shù)據(jù),Spire.XLS通常會自動識別并擴展表格。
// 6. 啟用表格的匯總行 (Total Row)
table.setShowTotalsRow(true);
// 7. 設(shè)置匯總行的計算方式 (例如,對 "總價" 列求和)
// 假設(shè) "總價" 是表格的第四列 (索引為3)
// 注意:TotalsCalculation枚舉定義了多種計算方式,如Sum, Average, Count等。
table.getColumns().get(3).setTotalsCalculation(ExcelTotalsCalculation.Sum);
// 可以為匯總行第一個單元格設(shè)置標(biāo)簽
table.getColumns().get(0).setTotalsRowLabel("總計:");
// 8. 保存修改后的工作簿
workbook.saveToFile("ModifiedExcelTable.xlsx", ExcelVersion.Version2016);
System.out.println("Excel表格已成功修改,添加新行并啟用匯總!");
}
}
關(guān)鍵點提示
sheet.getListObjects().get(index)或sheet.getListObjects().getByName(name)可以獲取到工作表中的特定表格對象。- 通過直接操作
sheet.getCellRange()并緊鄰表格數(shù)據(jù)區(qū)域下方添加數(shù)據(jù),Spire.XLS通常會自動擴展表格范圍。 setShowTotalsRow(true)啟用匯總行,getColumns().get(columnIndex).setTotalsCalculation()則指定各列的匯總計算方式。
3. 有效刪除 Excel 表格
當(dāng)不再需要某個表格時,我們可以選擇將其刪除。刪除表格意味著取消其結(jié)構(gòu)化特性,但通常會保留其數(shù)據(jù)內(nèi)容(變?yōu)槠胀▎卧駞^(qū)域)。
Spire.XLS for Java 實現(xiàn)
刪除表格是一個相對簡單的操作,只需獲取到表格對象,然后調(diào)用其 remove() 方法即可。
代碼示例
import com.spire.xls.*;
import com.spire.xls.core.IListObject;
public class DeleteExcelTable {
public static void main(String[] args) {
// 1. 加載一個包含表格的Excel文件
Workbook workbook = new Workbook();
workbook.loadFromFile("ModifiedExcelTable.xlsx"); // 使用上一步修改的文件
// 2. 獲取第一個工作表
Worksheet sheet = workbook.getWorksheets().get(0);
// 3. 獲取要刪除的表格對象 (例如,通過名稱 "銷售數(shù)據(jù)表")
IListObject tableToDelete = sheet.getListObjects().getByName("銷售數(shù)據(jù)表");
// 4. 刪除表格
if (tableToDelete != null) {
tableToDelete.remove();
System.out.println("Excel表格 '銷售數(shù)據(jù)表' 已成功刪除!");
} else {
System.out.println("未找到名為 '銷售數(shù)據(jù)表' 的表格。");
}
// 5. 保存修改后的工作簿
workbook.saveToFile("DeletedExcelTable.xlsx", ExcelVersion.Version2016);
}
}
注意事項
tableToDelete.remove()方法會刪除表格的結(jié)構(gòu)和功能(如篩選、樣式等),但表格內(nèi)的數(shù)據(jù)會保留在單元格中,成為普通的數(shù)據(jù)區(qū)域。- 在執(zhí)行刪除操作前,最好進行非空檢查,確保要刪除的表格確實存在。
總結(jié)
無論是批量生成帶有特定樣式的表格、動態(tài)更新數(shù)據(jù)、添加匯總行,還是按需移除不再需要的表格,Java Excel Automation 借助 Spire.XLS for Java 都能輕松應(yīng)對。掌握這些技能,將能有效提升你在數(shù)據(jù)處理、報表生成等方面的開發(fā)效率,解決實際工作中遇到的痛點。
到此這篇關(guān)于Java自動化實現(xiàn)在Excel工作表中創(chuàng)建、修改和刪除表格的文章就介紹到這了,更多相關(guān)Java操作Excel工作表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot使用thymeleaf實現(xiàn)前端表格
雖然現(xiàn)在流行前后端分離,但是后端模版在一些關(guān)鍵地方還是非常有用的,例如郵件模版、代碼模版等。當(dāng)然也不排除一些古老的項目后端依然使用動態(tài)模版。Thymeleaf 簡潔漂亮、容易理解,并且完美支持 HTML5,可以直接打開靜態(tài)頁面,同時不新增標(biāo)簽,只需增強屬性2022-10-10
Java反射獲取所有Controller和RestController類的方法
這篇文章給大家分享了Java反射獲取所有Controller和RestController類的方法,文中有詳細的代碼示例講解,具有一定的參考價值,需要的朋友可以參考下2023-08-08
AsyncHttpClient exception異常源碼流程解析
這篇文章主要為大家介紹了AsyncHttpClient的exception源碼流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
使用mybatis切片實現(xiàn)數(shù)據(jù)權(quán)限控制的操作流程
數(shù)據(jù)權(quán)限控制需要對查詢出的數(shù)據(jù)進行篩選,對業(yè)務(wù)入侵最少的方式就是利用mybatis或者數(shù)據(jù)庫連接池的切片對已有業(yè)務(wù)的sql進行修改,本文給大家介紹了使用mybatis切片實現(xiàn)數(shù)據(jù)權(quán)限控制的操作流程,需要的朋友可以參考下2024-07-07
如何基于回調(diào)實現(xiàn)Java的異步調(diào)用
這篇文章主要介紹了如何基于回調(diào)實現(xiàn)Java的異步調(diào)用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06
SpringBoot+MyBatis Plus實現(xiàn)update_time字段自動更新詳解
在 Spring Boot + MyBatis Plus 中實現(xiàn) update_time 字段自動更新,可通過 ??MyBatis Plus 的自動填充(Auto Fill)功能?? 完成,下面小編就來和大家詳細介紹一下吧2025-07-07

