在处理 Excel 数据时,原始数据通常以明细表形式保存。例如,一份销售记录可能包含日期、地区、产品、销售数量以及销售金额等信息。
当数据量增加后,直接查看明细数据并不方便。Excel 中的数据透视表(Pivot Table)可以根据已有数据快速完成汇总分析,例如:
- 按地区统计销售金额;
- 按产品分类查看销售情况;
- 对不同字段进行分组统计。
如果需要在 Java 程序中自动生成分析报表,也可以通过代码创建 Excel 数据透视表,避免手动打开 Excel 并重复设置。本文介绍如何使用 Java 创建 Excel 数据透视表,并设置字段完成数据汇总。
环境准备
创建 Java 项目后,通过 Maven 添加 Excel 处理依赖。
在 pom.xml 中添加:
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>
然后导入相关类:
arduino
import com.spire.xls.*;
准备 Excel 数据
创建数据透视表之前,需要先准备数据源。
例如,有一份销售数据:
| 日期 | 地区 | 产品 | 销售额 |
|---|---|---|---|
| 2026-01-01 | 华东 | 手机 | 5000 |
| 2026-01-02 | 华南 | 笔记本 | 8000 |
| 2026-01-03 | 华东 | 平板 | 3000 |
| 2026-01-04 | 华北 | 手机 | 6000 |
其中:
- 第一行作为字段名称;
- 后续行作为数据记录;
- 数据区域
A1:D5将作为数据透视表的数据源。
下面的示例首先加载包含销售数据的 Excel 文件,然后根据数据区域创建数据透视表。([e-iceblue.com](https://link.juejin.cn?target=http%3A%2F%2Fe-iceblue.com "http://e-iceblue.com")1)
创建 Excel 数据透视表
创建数据透视表主要包含以下步骤:
- 加载 Excel 文件;
- 获取数据源区域;
- 创建
PivotCache; - 添加
PivotTable; - 设置数据透视表样式;
- 保存结果文件。
完整代码如下:
java
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 位置创建一个名为"销售统计"的数据透视表。
不过,此时数据透视表还没有指定统计字段,需要进一步设置行字段和数据字段。
设置数据透视表字段
数据透视表中的字段主要分为:
- 行字段(Row Field) :用于分类显示数据;
- 数据字段(Data Field) :用于计算汇总结果。
例如,希望按照"地区"统计"销售额",需要:
- 将"地区"设置为行字段;
- 将"销售额"添加到数据区域,并使用求和方式统计。
下面的代码完整打开已经创建好的数据透视表,并设置字段:
java
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 |
其中,"地区"负责分类,"销售额"负责汇总计算。
添加多个数据统计字段
一个数据透视表可以同时添加多个统计字段。
例如,除了销售额,还需要统计销售数量,可以继续添加字段:
csharp
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();
}
}
这样生成的数据透视表中,可以同时查看多个指标。
保存生成的 Excel 文件
完成数据透视表设置后,可以通过 saveToFile() 方法保存结果:
typescript
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 |
字段名称会影响后续字段设置。
字段名称需要完全匹配
设置字段时:
csharp
pivotTable.getPivotFields().get("地区")
其中 "地区" 必须与 Excel 数据源中的标题完全一致。
如果名称不匹配,程序无法正确找到对应字段。
大数据量处理
当数据源包含大量记录时:
- 建议一次性写入数据;
- 避免频繁修改单元格;
- 完成操作后及时释放
Workbook对象。
总结
数据透视表适合对结构化 Excel 数据进行分类、汇总和分析。
通过 Java 创建数据透视表,可以将 Excel 报表生成流程自动化。开发者只需要准备数据源,然后通过代码设置字段和统计方式,即可生成包含汇总结果的 Excel 文件。
这种方式适用于自动生成统计报表、系统导出分析文件等场景。