Java創(chuàng)建Excel數據透視表(Pivot?Table)的完整實戰(zhàn)教程
在日常的數據分析開發(fā)中,我們經常需要對大量原始數據進行匯總、分類和統計。相比手動操作 Excel,使用代碼自動生成數據透視表(Pivot Table)不僅效率更高,還能很好地融入后端系統或數據處理流程。本文將介紹如何在 Java 中創(chuàng)建 Excel 數據透視表,并給出一個實用示例。
為什么使用代碼創(chuàng)建數據透視表
在實際項目中,數據通常來源于數據庫或接口。如果每次都手動打開 Excel 再創(chuàng)建透視表,不僅耗時,還容易出錯。通過 Java 自動生成數據透視表,可以實現:
- 自動化報表生成
- 提高數據處理效率
- 保證結果一致性
- 便于集成到現有系統
準備工作
本文示例基于 Spire.XLS for Java 實現。它提供了對 Excel 文件的完整操作能力,包括創(chuàng)建工作簿、編輯數據、生成圖表以及數據透視表等功能。
你可以通過 Maven 引入依賴:
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.xls</artifactId>
<version>13.8.0</version>
</dependency>示例:創(chuàng)建數據透視表
下面通過一個簡單示例,演示如何從已有數據創(chuàng)建數據透視表。
1. 準備數據
假設我們有如下結構的數據:
| Region | Product | Sales |
|---|---|---|
| East | A | 100 |
| West | B | 200 |
| East | B | 150 |
| West | A | 120 |
2. Java 實現代碼
import com.spire.xls.*;
public class CreatePivotTable {
public static void main(String[] args) {
Workbook workbook = new Workbook();
Worksheet sheet = workbook.getWorksheets().get(0);
// 寫入數據
sheet.getCellRange("A1").setText("Region");
sheet.getCellRange("B1").setText("Product");
sheet.getCellRange("C1").setText("Sales");
Object[][] data = {
{"East", "A", 100}, {"West", "B", 200},
{"East", "B", 150}, {"West", "A", 120}
};
for (int i = 0; i < data.length; i++) {
sheet.getCellRange(i + 2, 1).setText((String)data[i][0]);
sheet.getCellRange(i + 2, 2).setText((String)data[i][1]);
sheet.getCellRange(i + 2, 3).setNumberValue((Integer)data[i][2]);
}
// 創(chuàng)建透視表
Worksheet pivotSheet = workbook.getWorksheets().add("PivotTable");
CellRange dataRange = sheet.getCellRange("A1:C" + (data.length + 1));
PivotCache cache = workbook.getPivotCaches().add(dataRange);
PivotTable pivotTable = pivotSheet.getPivotTables().add(
"PivotTable", pivotSheet.getCellRange("A3"), cache
);
// 設置字段
pivotTable.getPivotFields().get("Region").setAxis(AxisTypes.Row);
pivotTable.getPivotFields().get("Product").setAxis(AxisTypes.Column);
pivotTable.getDataFields().add(
pivotTable.getPivotFields().get("Sales"),
"Total Sales",
SubtotalTypes.Sum
);
workbook.saveToFile("SalesPivotTable.xlsx", ExcelVersion.Version2016);
System.out.println("完成!");
}
}
代碼說明
上述代碼主要分為幾個關鍵步驟:
- 創(chuàng)建并填充原始數據
- 定義數據區(qū)域作為透視表的數據源
- 創(chuàng)建 PivotCache(用于緩存數據)
- 在新工作表中創(chuàng)建 PivotTable
- 配置行、列和數據字段
- 設置匯總方式(如 Sum)
理解這幾個步驟之后,你就可以根據實際業(yè)務自由調整透視表結構,比如增加篩選字段、修改統計方式(平均值、計數等)等。
運行效果
程序運行后,會生成一個 Excel 文件,并在新工作表中創(chuàng)建數據透視表,實現按 Region 分組行、按 Product 分組列,并對 Sales 進行匯總統計。
方法補充
1.Java 創(chuàng)建 Excel 數據透視表
Jar包準備:需要Excel類庫工具?Free Spire.XLS for Java,作者使用的是免費版。可去官網下載Jar包后解壓,將解壓后lib文件夾下的Spire.Xls.jar手動導入到Java程序;或者通過Maven倉庫下載導入。
JAVA程序代碼如下
import com.spire.xls.*;
public class CreatePivotTable {
public static void main(String[] args) {
//加載Excel測試文檔
Workbook wb = new Workbook();
wb.loadFromFile("test.xlsx");
//獲取第一個的工作表
Worksheet sheet = wb.getWorksheets().get(0);
//為需要匯總和分析的數據創(chuàng)建緩存
CellRange dataRange = sheet.getCellRange("A1:D10");
PivotCache cache = wb.getPivotCaches().add(dataRange);
//使用緩存創(chuàng)建數據透視表,并指定透視表的名稱以及在工作表中的位置
PivotTable pt = sheet.getPivotTables().add("PivotTable",sheet.getCellRange("A12"),cache);
//添加行字段1
PivotField pf1 = null;
if (pt.getPivotFields().get("月份") instanceof PivotField){
pf1 = (PivotField) pt.getPivotFields().get("月份");
}
pf1.setAxis(AxisTypes.Row);
//添加行字段2
PivotField pf2 = null;
if (pt.getPivotFields().get("廠商") instanceof PivotField){
pf2 = (PivotField) pt.getPivotFields().get("廠商");
}
pf2.setAxis(AxisTypes.Row);
//設置行字段的標題
pt.getOptions().setRowHeaderCaption("月份");
//添加列字段
PivotField pf3 = null;
if (pt.getPivotFields().get("產品") instanceof PivotField){
pf3 = (PivotField) pt.getPivotFields().get("產品");
}
pf3.setAxis(AxisTypes.Column);
//設置列字段標題
pt.getOptions().setColumnHeaderCaption("產品");
//添加值字段
pt.getDataFields().add(pt.getPivotFields().get("總產量"),"求和項:總產量",SubtotalTypes.Sum);
//設置透視表樣式
pt.setBuiltInStyle(PivotBuiltInStyles.PivotStyleDark12);
//保存文檔
wb.saveToFile("數據透視表.xlsx", ExcelVersion.Version2013);
wb.dispose();
}
}2. Java創(chuàng)建/刷新Excel透視表
創(chuàng)建透視表
import com.spire.xls.*;
public class CreatePivotTable {
public static void main(String[] args) {
//加載Excel測試文檔
Workbook wb = new Workbook();
wb.loadFromFile("test.xlsx");
//獲取第一個的工作表
Worksheet sheet = wb.getWorksheets().get(0);
//為需要匯總和分析的數據創(chuàng)建緩存
CellRange dataRange = sheet.getCellRange("A1:D10");
PivotCache cache = wb.getPivotCaches().add(dataRange);
//使用緩存創(chuàng)建數據透視表,并指定透視表的名稱以及在工作表中的位置
PivotTable pt = sheet.getPivotTables().add("PivotTable",sheet.getCellRange("A12"),cache);
//添加行字段1
PivotField pf1 = null;
if (pt.getPivotFields().get("月份") instanceof PivotField){
pf1 = (PivotField) pt.getPivotFields().get("月份");
}
pf1.setAxis(AxisTypes.Row);
//添加行字段2
PivotField pf2 = null;
if (pt.getPivotFields().get("廠商") instanceof PivotField){
pf2 = (PivotField) pt.getPivotFields().get("廠商");
}
pf2.setAxis(AxisTypes.Row);
//設置行字段的標題
pt.getOptions().setRowHeaderCaption("月份");
//添加列字段
PivotField pf3 = null;
if (pt.getPivotFields().get("產品") instanceof PivotField){
pf3 = (PivotField) pt.getPivotFields().get("產品");
}
pf3.setAxis(AxisTypes.Column);
//設置列字段標題
pt.getOptions().setColumnHeaderCaption("產品");
//添加值字段
pt.getDataFields().add(pt.getPivotFields().get("總產量"),"求和項:總產量",SubtotalTypes.Sum);
//設置透視表樣式
pt.setBuiltInStyle(PivotBuiltInStyles.PivotStyleDark12);
//保存文檔
wb.saveToFile("數據透視表.xlsx", ExcelVersion.Version2013);
wb.dispose();
}
}刷新透視表
import com.spire.xls.*;
public class RefreshPivotTable {
public static void main(String[] args) {
//創(chuàng)建實例,加載Excel
Workbook wb = new Workbook();
wb.loadFromFile("數據透視表.xlsx");
//獲取第一個工作表
Worksheet sheet = wb.getWorksheets().get(0);
//更改透視表的數據源數據
sheet.getCellRange("C2:C4").setText("產品A");
sheet.getCellRange("C5:C7").setText("產品B");
sheet.getCellRange("C8:C10").setText("產品C");
//獲取透視表,刷新數據
PivotTable pivotTable = (PivotTable) sheet.getPivotTables().get(0);
pivotTable.getCache().isRefreshOnLoad();
//保存文檔
wb.saveToFile("刷新透視表.xlsx",FileFormat.Version2013);
}
}折疊、展開透視表中的行
import com.spire.xls.*;
import com.spire.xls.core.spreadsheet.pivottables.XlsPivotTable;
public class ExpandRows {
public static void main(String[] args) {
//加載包含透視表的Excel
Workbook wb = new Workbook();
wb.loadFromFile("數據透視表.xlsx");
//獲取數據透視表
XlsPivotTable pivotTable = (XlsPivotTable) wb.getWorksheets().get(0).getPivotTables().get(0);
//計算數據
pivotTable.calculateData();
//展開”月份”字段下“2”的詳細信息
PivotField field = (PivotField) pivotTable.getPivotFields().get("月份");
field.hideItemDetail("2",false);
//折疊”月份”字段下“3”的詳細信息
PivotField field1 = (PivotField) pivotTable.getPivotFields().get("月份");
field1.hideItemDetail("3",true);
//保存并打開文檔
wb.saveToFile("展開、折疊行.xlsx", ExcelVersion.Version2013);
wb.dispose();
}
}小結
通過 Java 自動創(chuàng)建數據透視表,可以顯著提升數據處理效率,尤其適用于報表系統或批量數據分析場景。整個過程的核心在于數據源的定義以及透視表字段的配置。
在實際項目中,你可以將這一流程與數據庫查詢、定時任務等結合,實現完全自動化的數據分析輸出。
到此這篇關于Java創(chuàng)建Excel數據透視表(Pivot Table)的完整實戰(zhàn)教程的文章就介紹到這了,更多相關Java創(chuàng)建Excel數據透視表內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java深入學習圖形用戶界面GUI之創(chuàng)建窗體
圖形編程中,窗口是一個重要的概念,窗口其實是一個矩形框,應用程序可以使用其從而達到輸出結果和接受用戶輸入的效果,學習了GUI就讓我們用它來創(chuàng)建一個窗體2022-05-05
Spring Boot集成Druid出現異常報錯的原因及解決
Druid 可以很好的監(jiān)控 DB 池連接和 SQL 的執(zhí)行情況,天生就是針對監(jiān)控而生的 DB 連接池。本文講述了Spring Boot集成Druid項目中discard long time none received connection異常的解決方法,出現此問題的同學可以參考下2021-05-05
Springboot中Controller和RestController的使用及區(qū)別
文章總結了Spring框架中@Controller和@RestController的區(qū)別,包括它們的用途、工作機制、使用場景以及底層原理,文章指出,@Controller用于傳統的SpringMVC應用,返回視圖或數據(需@ResponseBody)2025-11-11

