使用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创建数据透视表的资料请关注脚本之家其它相关文章!

相关文章

  • 详解自定义SpringMVC的Http信息转换器的使用

    详解自定义SpringMVC的Http信息转换器的使用

    这篇文章主要介绍了详解自定义SpringMVC的Http信息转换器的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 简单了解SPRINGIOC的底层原理演变过程

    简单了解SPRINGIOC的底层原理演变过程

    这篇文章主要介绍了简单了解SPRINGIOC的底层原理演变过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • springMVC配置环境实现文件上传和下载

    springMVC配置环境实现文件上传和下载

    这篇文章主要为大家详细介绍了springMVC配置环境实现文件上传和下载的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • JAVA 中解密RSA算法JS加密实例详解

    JAVA 中解密RSA算法JS加密实例详解

    这篇文章主要介绍了JAVA 中解密RSA算法JS加密 的相关资料,需要的朋友可以参考下
    2017-04-04
  • Spring Boot 条件注解详情

    Spring Boot 条件注解详情

    这篇文章主要介绍了Spring Boot 条件注解详情,SpringBoot条件注解@Conditional,可用于根据某个特定的条件来判断是否需要创建某个特定的Bean,下文更多相关介绍,需要的小伙伴可以参考一下
    2022-05-05
  • Spring中Bean的生命周期使用解析

    Spring中Bean的生命周期使用解析

    这篇文章主要介绍了Spring中Bean的生命周期使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Springboot中前端向后端传递数据的几种方式

    Springboot中前端向后端传递数据的几种方式

    在前端和后端的交互中,前端需要向后端传递数据,常见的数据传递方式包括表单提交、URL参数、JSON请求等,本文将介绍常见的几种数据传递方式,并说明如何在SpringBoot中实现这些方式,需要的朋友可以参考下
    2025-08-08
  • spring cloud-zuul的Filter使用详解

    spring cloud-zuul的Filter使用详解

    这篇文章主要介绍了spring cloud-zuul的Filter使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • 解决阿里云OSS使用URL无法访问图片的两种方法

    解决阿里云OSS使用URL无法访问图片的两种方法

    这篇文章主要介绍了解决阿里云OSS使用URL无法访问图片的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Java并发中的ABA问题学习与解决方案

    Java并发中的ABA问题学习与解决方案

    这篇文章主要介绍了Java并发中的ABA问题学习与解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05

最新评论