使用Java在Excel中创建数据透视表

 更新时间:2026年03月30日 09:10:40   作者:大丸子  
在处理销售数据、财务报表或运营指标时,数据透视表是快速汇总和分析大量数据的强大工具,通过 Java 自动化这个过程可以实现定期报告的自动生成,大幅提高工作效率,本文将详细介绍如何使用 Java 在 Excel 工作簿中创建数据透视表,需要的朋友可以参考下

引言

在处理销售数据、财务报表或运营指标时,数据透视表是快速汇总和分析大量数据的强大工具。它能够自动对数据进行分类、聚合和重新排列,使复杂的数据集变得易于理解。与其手动创建汇总表或使用 Excel 交互式界面逐一操作,通过 Java 自动化这个过程可以实现定期报告的自动生成,大幅提高工作效率。

本文将详细介绍如何使用 Java 在 Excel 工作簿中创建数据透视表,通过编程方式构建灵活的数据分析工具,自动化将原始数据转换为结构化的分析报告。

环境准备

首先需要在 Maven 项目中添加 Free Spire.XLS for Java 依赖。将以下配置添加到 pom.xml 文件中:

<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <name>e-iceblue</name>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>
<dependency>
    <groupId>e-iceblue</groupId>
    <artifactId>spire.xls.free</artifactId>
    <version>16.3.1</version>
</dependency>

配置完成后,Maven 会自动下载必要的库文件。也可以手动下载 JAR 包并添加到项目的 classpath 中。

准备源数据

创建数据透视表的第一步是准备源数据。通常这些数据包含多个维度(如产品、时间)和度量值(如销售数量、收入)。以下代码展示如何在 Excel 中创建基础数据表:

// 创建新的工作簿
Workbook workbook = new Workbook();
// 获取第一个工作表
Worksheet sheet = workbook.getWorksheets().get(0);
// 设置表头
sheet.getCellRange("A1").setValue("Product");    // 产品列
sheet.getCellRange("B1").setValue("Month");      // 月份列
sheet.getCellRange("C1").setValue("Count");      // 销售数量列
// 填充产品数据
sheet.getCellRange("A2").setValue("Word");
sheet.getCellRange("A3").setValue("Word");
sheet.getCellRange("A4").setValue("Excel");
sheet.getCellRange("A5").setValue("Word");
sheet.getCellRange("A6").setValue("Excel");
sheet.getCellRange("A7").setValue("Excel");
// 填充月份数据
sheet.getCellRange("B2").setValue("January");
sheet.getCellRange("B3").setValue("February");
sheet.getCellRange("B4").setValue("January");
sheet.getCellRange("B5").setValue("January");
sheet.getCellRange("B6").setValue("February");
sheet.getCellRange("B7").setValue("February");
// 填充销售数量数据
sheet.getCellRange("C2").setValue("10");
sheet.getCellRange("C3").setValue("15");
sheet.getCellRange("C4").setValue("9");
sheet.getCellRange("C5").setValue("7");
sheet.getCellRange("C6").setValue("8");
sheet.getCellRange("C7").setValue("10");

这段代码创建了一个包含三列数据的表(A1:C7),其中每行代表一条销售记录。在实际应用中,这些数据可以从数据库、API 或其他数据源动态加载。

创建数据透视表

有了源数据后,就可以创建数据透视表。这个过程包括定义数据缓存、创建透视表对象,以及配置各个字段的显示方式:

// 定义数据范围(包含表头)
CellRange dataRange = sheet.getCellRange("A1:C7");
// 创建数据缓存
PivotCache cache = workbook.getPivotCaches().add(dataRange);
// 在工作表的 E10 单元格处创建数据透视表,名称为 "Pivot Table"
PivotTable pt = sheet.getPivotTables().add("Pivot Table", sheet.getCellRange("E10"), cache);
// 将 Product 字段添加到行区域
PivotField pf = (PivotField) pt.getPivotFields().get("Product");
pf.setAxis(AxisTypes.Row);
// 将 Month 字段也添加到行区域
PivotField pf2 = (PivotField) pt.getPivotFields().get("Month");
pf2.setAxis(AxisTypes.Row);
// 将 Count 字段添加到数据区域,并设置聚合方式为求和
pt.getDataFields().add(pt.getPivotFields().get("Count"), "SUM of Count", SubtotalTypes.Sum);
// 应用内置样式,使表格更加美观
pt.setBuiltInStyle(PivotBuiltInStyles.PivotStyleMedium12);
// 计算数据透视表的数据
pt.calculateData();
// 自动调整列宽以显示所有内容
sheet.autoFitColumn(5);
sheet.autoFitColumn(6);

关键概念解析:

  • PivotCache(数据缓存):是数据透视表的基础,存储源数据的快照。一个缓存可以被多个透视表共享
  • AxisTypes.Row:将字段设置为行轴,该字段会以行的形式显示在透视表的左侧
  • SubtotalTypes.Sum:指定数值字段的聚合方式。其他选项还包括 Count(计数)、Average(平均值)等
  • PivotBuiltInStyles:内置样式库提供了多种预定义的表格外观,快速美化透视表

完整代码示例

以下是一个完整的 Java 类,创建一个数据透视表并设置样式:

import com.spire.xls.*;
public class CreatePivotTableExample {
    public static void main(String[] args) {
        // 创建新的工作簿
        Workbook workbook = new Workbook();
        // 获取第一个工作表
        Worksheet sheet = workbook.getWorksheets().get(0);
        // 设置表头
        sheet.getCellRange("A1").setValue("Product");
        sheet.getCellRange("B1").setValue("Month");
        sheet.getCellRange("C1").setValue("Count");
        // 填充产品数据
        sheet.getCellRange("A2").setValue("Word");
        sheet.getCellRange("A3").setValue("Word");
        sheet.getCellRange("A4").setValue("Excel");
        sheet.getCellRange("A5").setValue("Word");
        sheet.getCellRange("A6").setValue("Excel");
        sheet.getCellRange("A7").setValue("Excel");
        // 填充月份数据
        sheet.getCellRange("B2").setValue("January");
        sheet.getCellRange("B3").setValue("February");
        sheet.getCellRange("B4").setValue("January");
        sheet.getCellRange("B5").setValue("January");
        sheet.getCellRange("B6").setValue("February");
        sheet.getCellRange("B7").setValue("February");
        // 填充销售数量数据
        sheet.getCellRange("C2").setValue("10");
        sheet.getCellRange("C3").setValue("15");
        sheet.getCellRange("C4").setValue("9");
        sheet.getCellRange("C5").setValue("7");
        sheet.getCellRange("C6").setValue("8");
        sheet.getCellRange("C7").setValue("10");
        // 定义数据范围
        CellRange dataRange = sheet.getCellRange("A1:C7");
        // 创建数据缓存
        PivotCache cache = workbook.getPivotCaches().add(dataRange);
        // 创建数据透视表
        PivotTable pt = sheet.getPivotTables().add("Pivot Table", sheet.getCellRange("E10"), cache);
        // 设置行字段
        PivotField pf = (PivotField) pt.getPivotFields().get("Product");
        pf.setAxis(AxisTypes.Row);
        PivotField pf2 = (PivotField) pt.getPivotFields().get("Month");
        pf2.setAxis(AxisTypes.Row);
        // 设置数据字段(求和)
        pt.getDataFields().add(pt.getPivotFields().get("Count"), "SUM of Count", SubtotalTypes.Sum);
        // 应用样式
        pt.setBuiltInStyle(PivotBuiltInStyles.PivotStyleMedium12);
        // 计算透视表数据
        pt.calculateData();
        // 自动调整列宽
        sheet.autoFitColumn(5);
        sheet.autoFitColumn(6);
        // 保存文件为 Excel 格式
        workbook.saveToFile("create_pivot_table_demo.xlsx", ExcelVersion.Version2013);
        // 释放资源
        workbook.dispose();
        System.out.println("数据透视表已成功创建!");
    }
}

生成结果预览:

实用技巧

  • 自定义透视表位置:通过修改 getCellRange() 中的单元格地址(如 "E10"),可以将透视表放置在工作表的任意位置
  • 多字段聚合:可以添加多个数据字段,例如同时显示销售数量和销售额的求和结果
  • 不同的聚合函数:除了 Sum 外,还支持 AverageCountMinMax 等多种聚合方式
  • 列字段配置:使用 setAxis(AxisTypes.Column) 可以将字段设置为列轴,创建复杂的透视表布局

总结

通过 Java 编程创建 Excel 数据透视表,使我们能够自动化数据分析工作流。这种方法特别适合需要定期生成报告或处理大量数据集的场景。Spire.XLS 库提供的 API 直观易用,使开发者可以专注于业务逻辑,而不必深入 Excel 的复杂内部结构。

您可以基于本文提供的代码框架进行扩展,实现更复杂的数据分析需求,例如添加数据透视图、实现多表联合分析,或集成到自动化报告系统中。

以上就是使用Java在Excel中创建数据透视表的详细内容,更多关于Java Excel创建数据透视表的资料请关注脚本之家其它相关文章!

相关文章

  • 详解path和classpath的区别

    详解path和classpath的区别

    这篇文章主要介绍了详解path和classpath的区别的相关资料,需要的朋友可以参考下
    2017-06-06
  • spring boot中多线程开发的注意事项总结

    spring boot中多线程开发的注意事项总结

    spring boot 通过任务执行器 taskexecutor 来实现多线程和并发编程。下面这篇文章主要给大家介绍了关于spring boot中多线程开发的注意事项,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-09-09
  • 老生常谈反射之Class类的使用(必看篇)

    老生常谈反射之Class类的使用(必看篇)

    下面小编就为大家带一篇老生常谈反射之Class类的使用(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 关于Idea使用git时commit特别慢的问题及解决方法

    关于Idea使用git时commit特别慢的问题及解决方法

    这篇文章主要介绍了关于Idea使用git时commit特别慢的问题及解决方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • 关于SSM框架下各层的解释说明(Controller等)

    关于SSM框架下各层的解释说明(Controller等)

    这篇文章主要介绍了关于SSM框架下各层的解释说明(Controller等),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • java类成员中的访问级别浅析

    java类成员中的访问级别浅析

    在本篇文章里小编给大家整理的是一篇关于java类成员中的访问级别浅析内容,有兴趣的朋友们跟着学习下。
    2021-01-01
  • Java编程实现验证哥德巴赫猜想

    Java编程实现验证哥德巴赫猜想

    这篇文章主要介绍了Java编程实现验证哥德巴赫猜想,具有一定参考价值,需要的朋友可以了解下。
    2017-12-12
  • Spring Boot 404错误全面解析与解决方案

    Spring Boot 404错误全面解析与解决方案

    在Spring Boot应用开发过程中,HTTP状态码404(Not Found)是最为常见的运行时问题之一,该错误表明客户端请求的资源无法在服务器端找到,下面就来详细的介绍一下该问题的解决,感兴趣的可以了解一下
    2025-12-12
  • 关于为何说JAVA中要慎重使用继承详解

    关于为何说JAVA中要慎重使用继承详解

    Java继承是面向对象的最显著的一个特征,然而下面这篇文章主要给大家介绍了关于为何说JAVA中要慎重使用继承的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-08-08
  • Java 实现万年历总结

    Java 实现万年历总结

    这篇文章主要介绍了Java 万年历实现代码的相关资料,需要的朋友可以参考下
    2016-09-09

最新评论