最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java創(chuàng)建Excel數(shù)據(jù)透視表(Pivot?Table)的完整實(shí)戰(zhàn)教程

 更新時(shí)間:2026年03月19日 11:26:35   作者:缺點(diǎn)內(nèi)向  
在日常的數(shù)據(jù)分析開發(fā)中,我們經(jīng)常需要對大量原始數(shù)據(jù)進(jìn)行匯總、分類和統(tǒng)計(jì),本文將介紹如何在?Java?中創(chuàng)建?Excel?數(shù)據(jù)透視表,并給出一個(gè)實(shí)用示例,有需要的小伙伴可以了解下

在日常的數(shù)據(jù)分析開發(fā)中,我們經(jīng)常需要對大量原始數(shù)據(jù)進(jìn)行匯總、分類和統(tǒng)計(jì)。相比手動操作 Excel,使用代碼自動生成數(shù)據(jù)透視表(Pivot Table)不僅效率更高,還能很好地融入后端系統(tǒng)或數(shù)據(jù)處理流程。本文將介紹如何在 Java 中創(chuàng)建 Excel 數(shù)據(jù)透視表,并給出一個(gè)實(shí)用示例。

為什么使用代碼創(chuàng)建數(shù)據(jù)透視表

在實(shí)際項(xiàng)目中,數(shù)據(jù)通常來源于數(shù)據(jù)庫或接口。如果每次都手動打開 Excel 再創(chuàng)建透視表,不僅耗時(shí),還容易出錯(cuò)。通過 Java 自動生成數(shù)據(jù)透視表,可以實(shí)現(xiàn):

  • 自動化報(bào)表生成
  • 提高數(shù)據(jù)處理效率
  • 保證結(jié)果一致性
  • 便于集成到現(xiàn)有系統(tǒng)

準(zhǔn)備工作

本文示例基于 Spire.XLS for Java 實(shí)現(xiàn)。它提供了對 Excel 文件的完整操作能力,包括創(chuàng)建工作簿、編輯數(shù)據(jù)、生成圖表以及數(shù)據(jù)透視表等功能。

你可以通過 Maven 引入依賴:

<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>spire.xls</artifactId>
    <version>13.8.0</version>
</dependency>

示例:創(chuàng)建數(shù)據(jù)透視表

下面通過一個(gè)簡單示例,演示如何從已有數(shù)據(jù)創(chuàng)建數(shù)據(jù)透視表。

1. 準(zhǔn)備數(shù)據(jù)

假設(shè)我們有如下結(jié)構(gòu)的數(shù)據(jù):

RegionProductSales
EastA100
WestB200
EastB150
WestA120

2. Java 實(shí)現(xiàn)代碼

import com.spire.xls.*;

public class CreatePivotTable {
    public static void main(String[] args) {
        
        Workbook workbook = new Workbook();
        Worksheet sheet = workbook.getWorksheets().get(0);
        
        // 寫入數(shù)據(jù)
        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
        );
        
        // 設(shè)置字段
        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("完成!");
    }
}

代碼說明

上述代碼主要分為幾個(gè)關(guān)鍵步驟:

  • 創(chuàng)建并填充原始數(shù)據(jù)
  • 定義數(shù)據(jù)區(qū)域作為透視表的數(shù)據(jù)源
  • 創(chuàng)建 PivotCache(用于緩存數(shù)據(jù))
  • 在新工作表中創(chuàng)建 PivotTable
  • 配置行、列和數(shù)據(jù)字段
  • 設(shè)置匯總方式(如 Sum)

理解這幾個(gè)步驟之后,你就可以根據(jù)實(shí)際業(yè)務(wù)自由調(diào)整透視表結(jié)構(gòu),比如增加篩選字段、修改統(tǒng)計(jì)方式(平均值、計(jì)數(shù)等)等。

運(yùn)行效果

程序運(yùn)行后,會生成一個(gè) Excel 文件,并在新工作表中創(chuàng)建數(shù)據(jù)透視表,實(shí)現(xiàn)按 Region 分組行、按 Product 分組列,并對 Sales 進(jìn)行匯總統(tǒng)計(jì)。

方法補(bǔ)充

1.Java 創(chuàng)建 Excel 數(shù)據(jù)透視表

Jar包準(zhǔn)備:需要Excel類庫工具?Free Spire.XLS for Java,作者使用的是免費(fèi)版??扇ス倬W(wǎng)下載Jar包后解壓,將解壓后lib文件夾下的Spire.Xls.jar手動導(dǎo)入到Java程序;或者通過Maven倉庫下載導(dǎo)入。

JAVA程序代碼如下

import com.spire.xls.*;
public class CreatePivotTable {
public static void main(String[] args) {
//加載Excel測試文檔
Workbook wb = new Workbook();
wb.loadFromFile("test.xlsx");
//獲取第一個(gè)的工作表
Worksheet sheet = wb.getWorksheets().get(0);
//為需要匯總和分析的數(shù)據(jù)創(chuàng)建緩存
CellRange dataRange = sheet.getCellRange("A1:D10");
PivotCache cache = wb.getPivotCaches().add(dataRange);
//使用緩存創(chuàng)建數(shù)據(jù)透視表,并指定透視表的名稱以及在工作表中的位置
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);
//設(shè)置行字段的標(biāo)題
pt.getOptions().setRowHeaderCaption("月份");
//添加列字段
PivotField pf3 = null;
if (pt.getPivotFields().get("產(chǎn)品") instanceof PivotField){
pf3 = (PivotField) pt.getPivotFields().get("產(chǎn)品");
}
pf3.setAxis(AxisTypes.Column);
//設(shè)置列字段標(biāo)題
pt.getOptions().setColumnHeaderCaption("產(chǎn)品");
//添加值字段
pt.getDataFields().add(pt.getPivotFields().get("總產(chǎn)量"),"求和項(xiàng):總產(chǎn)量",SubtotalTypes.Sum);
//設(shè)置透視表樣式
pt.setBuiltInStyle(PivotBuiltInStyles.PivotStyleDark12);
//保存文檔
wb.saveToFile("數(shù)據(jù)透視表.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");
         //獲取第一個(gè)的工作表
         Worksheet sheet = wb.getWorksheets().get(0);
         //為需要匯總和分析的數(shù)據(jù)創(chuàng)建緩存
         CellRange dataRange = sheet.getCellRange("A1:D10");
         PivotCache cache = wb.getPivotCaches().add(dataRange);
         //使用緩存創(chuàng)建數(shù)據(jù)透視表,并指定透視表的名稱以及在工作表中的位置
         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);
         //設(shè)置行字段的標(biāo)題
         pt.getOptions().setRowHeaderCaption("月份");
         //添加列字段
         PivotField pf3 = null;
         if (pt.getPivotFields().get("產(chǎn)品") instanceof PivotField){
             pf3 = (PivotField) pt.getPivotFields().get("產(chǎn)品");
         }
         pf3.setAxis(AxisTypes.Column);
         //設(shè)置列字段標(biāo)題
         pt.getOptions().setColumnHeaderCaption("產(chǎn)品");
         //添加值字段
         pt.getDataFields().add(pt.getPivotFields().get("總產(chǎn)量"),"求和項(xiàng):總產(chǎn)量",SubtotalTypes.Sum);
         //設(shè)置透視表樣式
         pt.setBuiltInStyle(PivotBuiltInStyles.PivotStyleDark12);
         //保存文檔
         wb.saveToFile("數(shù)據(jù)透視表.xlsx", ExcelVersion.Version2013);
         wb.dispose();
     }
 }

刷新透視表

import com.spire.xls.*;
 public class RefreshPivotTable {
     public static void main(String[] args) {
         //創(chuàng)建實(shí)例,加載Excel
         Workbook wb = new Workbook();
         wb.loadFromFile("數(shù)據(jù)透視表.xlsx");
         //獲取第一個(gè)工作表
         Worksheet sheet = wb.getWorksheets().get(0);
         //更改透視表的數(shù)據(jù)源數(shù)據(jù)
         sheet.getCellRange("C2:C4").setText("產(chǎn)品A");
         sheet.getCellRange("C5:C7").setText("產(chǎn)品B");
         sheet.getCellRange("C8:C10").setText("產(chǎn)品C");
         //獲取透視表,刷新數(shù)據(jù)
         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("數(shù)據(jù)透視表.xlsx");
         //獲取數(shù)據(jù)透視表
         XlsPivotTable pivotTable = (XlsPivotTable) wb.getWorksheets().get(0).getPivotTables().get(0);
         //計(jì)算數(shù)據(jù)
         pivotTable.calculateData();
         //展開”月份”字段下“2”的詳細(xì)信息
         PivotField field = (PivotField) pivotTable.getPivotFields().get("月份");
         field.hideItemDetail("2",false);
         //折疊”月份”字段下“3”的詳細(xì)信息
         PivotField field1 = (PivotField) pivotTable.getPivotFields().get("月份");
         field1.hideItemDetail("3",true);
         //保存并打開文檔
         wb.saveToFile("展開、折疊行.xlsx", ExcelVersion.Version2013);
         wb.dispose();
     }
 }

小結(jié)

通過 Java 自動創(chuàng)建數(shù)據(jù)透視表,可以顯著提升數(shù)據(jù)處理效率,尤其適用于報(bào)表系統(tǒng)或批量數(shù)據(jù)分析場景。整個(gè)過程的核心在于數(shù)據(jù)源的定義以及透視表字段的配置。

在實(shí)際項(xiàng)目中,你可以將這一流程與數(shù)據(jù)庫查詢、定時(shí)任務(wù)等結(jié)合,實(shí)現(xiàn)完全自動化的數(shù)據(jù)分析輸出。

到此這篇關(guān)于Java創(chuàng)建Excel數(shù)據(jù)透視表(Pivot Table)的完整實(shí)戰(zhàn)教程的文章就介紹到這了,更多相關(guān)Java創(chuàng)建Excel數(shù)據(jù)透視表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Echarts+SpringMvc顯示后臺實(shí)時(shí)數(shù)據(jù)

    Echarts+SpringMvc顯示后臺實(shí)時(shí)數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了Echarts+SpringMvc顯示后臺實(shí)時(shí)數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Java原生序列化和反序列化代碼實(shí)例

    Java原生序列化和反序列化代碼實(shí)例

    這篇文章主要介紹了Java原生序列化和反序列化代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • SpringBoot+MySQL實(shí)現(xiàn)讀寫分離的多種具體方案

    SpringBoot+MySQL實(shí)現(xiàn)讀寫分離的多種具體方案

    在高并發(fā)和大數(shù)據(jù)量的場景下,數(shù)據(jù)庫成為了系統(tǒng)的瓶頸。為了提高數(shù)據(jù)庫的處理能力和性能,讀寫分離成為了一種常用的解決方案,本文將介紹在Spring?Boot項(xiàng)目中實(shí)現(xiàn)MySQL數(shù)據(jù)庫讀寫分離的多種具體方案,需要的朋友可以參考下
    2023-06-06
  • Java深入學(xué)習(xí)圖形用戶界面GUI之創(chuàng)建窗體

    Java深入學(xué)習(xí)圖形用戶界面GUI之創(chuàng)建窗體

    圖形編程中,窗口是一個(gè)重要的概念,窗口其實(shí)是一個(gè)矩形框,應(yīng)用程序可以使用其從而達(dá)到輸出結(jié)果和接受用戶輸入的效果,學(xué)習(xí)了GUI就讓我們用它來創(chuàng)建一個(gè)窗體
    2022-05-05
  • Spring Boot集成Druid出現(xiàn)異常報(bào)錯(cuò)的原因及解決

    Spring Boot集成Druid出現(xiàn)異常報(bào)錯(cuò)的原因及解決

    Druid 可以很好的監(jiān)控 DB 池連接和 SQL 的執(zhí)行情況,天生就是針對監(jiān)控而生的 DB 連接池。本文講述了Spring Boot集成Druid項(xiàng)目中discard long time none received connection異常的解決方法,出現(xiàn)此問題的同學(xué)可以參考下
    2021-05-05
  • mybatis中嵌套查詢的使用解讀

    mybatis中嵌套查詢的使用解讀

    這篇文章主要介紹了mybatis中嵌套查詢的使用解讀,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java全面細(xì)致講解類與對象

    Java全面細(xì)致講解類與對象

    類和對象是兩種以計(jì)算機(jī)為載體的計(jì)算機(jī)語言的合稱。對象是對客觀事物的抽象,類是對對象的抽象。類是一種抽象的數(shù)據(jù)類型;變量就是可以變化的量,存儲在內(nèi)存中—個(gè)可以擁有在某個(gè)范圍內(nèi)的可變存儲區(qū)域
    2022-05-05
  • Springboot中Controller和RestController的使用及區(qū)別

    Springboot中Controller和RestController的使用及區(qū)別

    文章總結(jié)了Spring框架中@Controller和@RestController的區(qū)別,包括它們的用途、工作機(jī)制、使用場景以及底層原理,文章指出,@Controller用于傳統(tǒng)的SpringMVC應(yīng)用,返回視圖或數(shù)據(jù)(需@ResponseBody)
    2025-11-11
  • java實(shí)現(xiàn)變更文件查詢的方法

    java實(shí)現(xiàn)變更文件查詢的方法

    這篇文章主要介紹了java實(shí)現(xiàn)變更文件查詢的方法,可通過java查詢文件最后修改時(shí)間的方法實(shí)現(xiàn)查找變更文件的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Java?ArrayList集合之解鎖數(shù)據(jù)存儲新姿勢

    Java?ArrayList集合之解鎖數(shù)據(jù)存儲新姿勢

    這篇文章主要介紹了Java?ArrayList集合之解鎖數(shù)據(jù)存儲新姿勢,ArrayList是一個(gè)動態(tài)數(shù)組,可以自動調(diào)整大小,并提供了豐富的操作方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03

最新評論

乐安县| 威宁| 海阳市| 错那县| 昌宁县| 定襄县| 正定县| 湖北省| 华宁县| 定结县| 天峨县| 策勒县| 达尔| 巍山| 黄大仙区| 桐柏县| 丹巴县| 黄冈市| 阳山县| 广汉市| 普安县| 黄浦区| 沙坪坝区| 沐川县| 扎鲁特旗| 柳州市| 长垣县| 徐汇区| 海丰县| 太和县| 航空| 犍为县| 平罗县| 资源县| 永和县| 项城市| 苏尼特右旗| 邯郸市| 临安市| 西和县| 鄱阳县|