java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java创建Excel数据透视表

Java创建Excel数据透视表(Pivot Table)的完整实战教程

作者:缺点内向

在日常的数据分析开发中,我们经常需要对大量原始数据进行汇总、分类和统计,本文将介绍如何在 Java 中创建 Excel 数据透视表,并给出一个实用示例,有需要的小伙伴可以了解下

在日常的数据分析开发中,我们经常需要对大量原始数据进行汇总、分类和统计。相比手动操作 Excel,使用代码自动生成数据透视表(Pivot Table)不仅效率更高,还能很好地融入后端系统或数据处理流程。本文将介绍如何在 Java 中创建 Excel 数据透视表,并给出一个实用示例。

为什么使用代码创建数据透视表

在实际项目中,数据通常来源于数据库或接口。如果每次都手动打开 Excel 再创建透视表,不仅耗时,还容易出错。通过 Java 自动生成数据透视表,可以实现:

准备工作

本文示例基于 Spire.XLS for Java 实现。它提供了对 Excel 文件的完整操作能力,包括创建工作簿、编辑数据、生成图表以及数据透视表等功能。

你可以通过 Maven 引入依赖:

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

示例:创建数据透视表

下面通过一个简单示例,演示如何从已有数据创建数据透视表。

1. 准备数据

假设我们有如下结构的数据:

RegionProductSales
EastA100
WestB200
EastB150
WestA120

2. Java 实现代码

import com.spire.xls.*;

public class CreatePivotTable {
    public static void main(String[] args) {
        
        Workbook workbook = new Workbook();
        Worksheet sheet = workbook.getWorksheets().get(0);
        
        // 写入数据
        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]);
        }
        
        // 创建透视表
        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
        );
        
        // 设置字段
        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("完成!");
    }
}

代码说明

上述代码主要分为几个关键步骤:

理解这几个步骤之后,你就可以根据实际业务自由调整透视表结构,比如增加筛选字段、修改统计方式(平均值、计数等)等。

运行效果

程序运行后,会生成一个 Excel 文件,并在新工作表中创建数据透视表,实现按 Region 分组行、按 Product 分组列,并对 Sales 进行汇总统计。

方法补充

1.Java 创建 Excel 数据透视表

Jar包准备:需要Excel类库工具?Free Spire.XLS for Java,作者使用的是免费版。可去官网下载Jar包后解压,将解压后lib文件夹下的Spire.Xls.jar手动导入到Java程序;或者通过Maven仓库下载导入。

JAVA程序代码如下

import com.spire.xls.*;
public class CreatePivotTable {
public static void main(String[] args) {
//加载Excel测试文档
Workbook wb = new Workbook();
wb.loadFromFile("test.xlsx");
//获取第一个的工作表
Worksheet sheet = wb.getWorksheets().get(0);
//为需要汇总和分析的数据创建缓存
CellRange dataRange = sheet.getCellRange("A1:D10");
PivotCache cache = wb.getPivotCaches().add(dataRange);
//使用缓存创建数据透视表,并指定透视表的名称以及在工作表中的位置
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);
//设置行字段的标题
pt.getOptions().setRowHeaderCaption("月份");
//添加列字段
PivotField pf3 = null;
if (pt.getPivotFields().get("产品") instanceof PivotField){
pf3 = (PivotField) pt.getPivotFields().get("产品");
}
pf3.setAxis(AxisTypes.Column);
//设置列字段标题
pt.getOptions().setColumnHeaderCaption("产品");
//添加值字段
pt.getDataFields().add(pt.getPivotFields().get("总产量"),"求和项:总产量",SubtotalTypes.Sum);
//设置透视表样式
pt.setBuiltInStyle(PivotBuiltInStyles.PivotStyleDark12);
//保存文档
wb.saveToFile("数据透视表.xlsx", ExcelVersion.Version2013);
wb.dispose();
}
}

2. Java创建/刷新Excel透视表

创建透视表

import com.spire.xls.*;
 public class CreatePivotTable {
     public static void main(String[] args) {
         //加载Excel测试文档
         Workbook wb = new Workbook();
         wb.loadFromFile("test.xlsx");
         //获取第一个的工作表
         Worksheet sheet = wb.getWorksheets().get(0);
         //为需要汇总和分析的数据创建缓存
         CellRange dataRange = sheet.getCellRange("A1:D10");
         PivotCache cache = wb.getPivotCaches().add(dataRange);
         //使用缓存创建数据透视表,并指定透视表的名称以及在工作表中的位置
         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);
         //设置行字段的标题
         pt.getOptions().setRowHeaderCaption("月份");
         //添加列字段
         PivotField pf3 = null;
         if (pt.getPivotFields().get("产品") instanceof PivotField){
             pf3 = (PivotField) pt.getPivotFields().get("产品");
         }
         pf3.setAxis(AxisTypes.Column);
         //设置列字段标题
         pt.getOptions().setColumnHeaderCaption("产品");
         //添加值字段
         pt.getDataFields().add(pt.getPivotFields().get("总产量"),"求和项:总产量",SubtotalTypes.Sum);
         //设置透视表样式
         pt.setBuiltInStyle(PivotBuiltInStyles.PivotStyleDark12);
         //保存文档
         wb.saveToFile("数据透视表.xlsx", ExcelVersion.Version2013);
         wb.dispose();
     }
 }

刷新透视表

import com.spire.xls.*;
 public class RefreshPivotTable {
     public static void main(String[] args) {
         //创建实例,加载Excel
         Workbook wb = new Workbook();
         wb.loadFromFile("数据透视表.xlsx");
         //获取第一个工作表
         Worksheet sheet = wb.getWorksheets().get(0);
         //更改透视表的数据源数据
         sheet.getCellRange("C2:C4").setText("产品A");
         sheet.getCellRange("C5:C7").setText("产品B");
         sheet.getCellRange("C8:C10").setText("产品C");
         //获取透视表,刷新数据
         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("数据透视表.xlsx");
         //获取数据透视表
         XlsPivotTable pivotTable = (XlsPivotTable) wb.getWorksheets().get(0).getPivotTables().get(0);
         //计算数据
         pivotTable.calculateData();
         //展开”月份”字段下“2”的详细信息
         PivotField field = (PivotField) pivotTable.getPivotFields().get("月份");
         field.hideItemDetail("2",false);
         //折叠”月份”字段下“3”的详细信息
         PivotField field1 = (PivotField) pivotTable.getPivotFields().get("月份");
         field1.hideItemDetail("3",true);
         //保存并打开文档
         wb.saveToFile("展开、折叠行.xlsx", ExcelVersion.Version2013);
         wb.dispose();
     }
 }

小结

通过 Java 自动创建数据透视表,可以显著提升数据处理效率,尤其适用于报表系统或批量数据分析场景。整个过程的核心在于数据源的定义以及透视表字段的配置。

在实际项目中,你可以将这一流程与数据库查询、定时任务等结合,实现完全自动化的数据分析输出。

到此这篇关于Java创建Excel数据透视表(Pivot Table)的完整实战教程的文章就介绍到这了,更多相关Java创建Excel数据透视表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文