在处理 Excel 数据时,原始数据通常以明细表形式保存。例如,一份销售记录可能包含日期、地区、产品、销售数量以及销售金额等信息。
当数据量增加后,直接查看明细数据并不方便。Excel 中的数据透视表(Pivot Table)可以根据已有数据快速完成汇总分析,例如:
如果需要在 Java 程序中自动生成分析报表,也可以通过代码创建 Excel 数据透视表,避免手动打开 Excel 并重复设置。本文介绍如何使用 Java 创建 Excel 数据透视表,并设置字段完成数据汇总。
创建 Java 项目后,通过 Maven 添加 Excel 处理依赖。
在 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>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.xls</artifactId>
<version>16.6.5</version>
</dependency>
</dependencies>然后导入相关类:
import com.spire.xls.*;创建数据透视表之前,需要先准备数据源。
例如,有一份销售数据:
日期 | 地区 | 产品 | 销售额 |
|---|---|---|---|
2026-01-01 | 华东 | 手机 | 5000 |
2026-01-02 | 华南 | 笔记本 | 8000 |
2026-01-03 | 华东 | 平板 | 3000 |
2026-01-04 | 华北 | 手机 | 6000 |
其中:
A1:D5 将作为数据透视表的数据源。下面的示例首先加载包含销售数据的 Excel 文件,然后根据数据区域创建数据透视表。([e-iceblue.com][1])
创建数据透视表主要包含以下步骤:
PivotCache;PivotTable;完整代码如下:
import com.spire.xls.*;
public class CreatePivotTable {
public static void main(String[] args) {
// 创建 Workbook 对象
Workbook workbook = new Workbook();
// 加载包含销售数据的 Excel 文件
workbook.loadFromFile("销售数据.xlsx");
// 获取第一个工作表
Worksheet sheet = workbook.getWorksheets().get(0);
// 获取数据源区域
CellRange dataRange = sheet.getCellRange("A1:D5");
// 根据数据区域创建数据透视表缓存
PivotCache cache = workbook.getPivotCaches().add(dataRange);
// 在指定位置创建数据透视表
PivotTable pivotTable = sheet.getPivotTables().add("销售统计", sheet.getCellRange("F3"), cache);
// 设置数据透视表样式
pivotTable.setBuiltInStyle(PivotBuiltInStyles.PivotStyleMedium10);
// 保存结果文件
workbook.saveToFile("创建数据透视表.xlsx", ExcelVersion.Version2016);
// 释放资源
workbook.dispose();
}
}运行代码后,会在工作表 F3 位置创建一个名为“销售统计”的数据透视表。
不过,此时数据透视表还没有指定统计字段,需要进一步设置行字段和数据字段。
数据透视表中的字段主要分为:
例如,希望按照“地区”统计“销售额”,需要:
下面的代码完整打开已经创建好的数据透视表,并设置字段:
import com.spire.xls.*;
import com.spire.xls.core.IPivotField;
public class SetPivotFields {
public static void main(String[] args) {
// 创建 Workbook 对象
Workbook workbook = new Workbook();
// 加载包含数据透视表的 Excel 文件
workbook.loadFromFile("创建数据透视表.xlsx");
// 获取工作表
Worksheet sheet = workbook.getWorksheets().get(0);
// 获取第一个数据透视表
PivotTable pivotTable = sheet.getPivotTables().get(0);
// 获取“地区”字段,并设置为行字段
IPivotField regionField = pivotTable.getPivotFields().get("地区");
regionField.setAxis(AxisTypes.Row);
// 添加“销售额”字段,并进行求和统计
pivotTable.getDataFields().add(pivotTable.getPivotFields().get("销售额"), "销售额合计", SubtotalTypes.Sum);
// 保存结果
workbook.saveToFile("设置字段后的数据透视表.xlsx", ExcelVersion.Version2016);
// 释放资源
workbook.dispose();
}
}生成后的数据透视表结构类似:
地区 | 销售额合计 |
|---|---|
华东 | 8000 |
华南 | 8000 |
华北 | 6000 |
其中,“地区”负责分类,“销售额”负责汇总计算。
一个数据透视表可以同时添加多个统计字段。
例如,除了销售额,还需要统计销售数量,可以继续添加字段:
import com.spire.xls.*;
import com.spire.xls.core.IPivotField;
public class AddMultipleDataFields {
public static void main(String[] args) {
// 创建 Workbook 对象
Workbook workbook = new Workbook();
// 加载包含数据透视表的 Excel 文件
workbook.loadFromFile("创建数据透视表.xlsx");
// 获取工作表
Worksheet sheet = workbook.getWorksheets().get(0);
// 获取数据透视表
PivotTable pivotTable = sheet.getPivotTables().get(0);
// 添加销售额汇总字段
pivotTable.getDataFields().add(pivotTable.getPivotFields().get("销售额"), "销售额合计", SubtotalTypes.Sum);
// 添加销售数量汇总字段
pivotTable.getDataFields().add(pivotTable.getPivotFields().get("销售数量"), "销售数量合计", SubtotalTypes.Sum);
// 保存文件
workbook.saveToFile("多字段数据透视表.xlsx", ExcelVersion.Version2016);
// 释放资源
workbook.dispose();
}
}这样生成的数据透视表中,可以同时查看多个指标。
完成数据透视表设置后,可以通过 saveToFile() 方法保存结果:
import com.spire.xls.*;
public class SavePivotTable {
public static void main(String[] args) {
// 创建 Workbook 对象
Workbook workbook = new Workbook();
// 加载 Excel 文件
workbook.loadFromFile("设置字段后的数据透视表.xlsx");
// 保存新的 Excel 文件
workbook.saveToFile("销售分析报表.xlsx", ExcelVersion.Version2016);
// 释放资源
workbook.dispose();
}
}生成的 Excel 文件可以直接使用 Microsoft Excel 打开,并继续进行筛选或调整。
创建数据透视表时,第一行通常需要作为字段标题。
例如:
正确:
地区 | 产品 | 销售额 |
|---|---|---|
华东 | 手机 | 5000 |
不建议:
A | B | C |
|---|---|---|
华东 | 手机 | 5000 |
字段名称会影响后续字段设置。
设置字段时:
pivotTable.getPivotFields().get("地区")其中 "地区" 必须与 Excel 数据源中的标题完全一致。
如果名称不匹配,程序无法正确找到对应字段。
当数据源包含大量记录时:
Workbook 对象。数据透视表适合对结构化 Excel 数据进行分类、汇总和分析。
通过 Java 创建数据透视表,可以将 Excel 报表生成流程自动化。开发者只需要准备数据源,然后通过代码设置字段和统计方式,即可生成包含汇总结果的 Excel 文件。
这种方式适用于自动生成统计报表、系统导出分析文件等场景。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。