Java 创建、刷新Excel透视表/设置透视表行折叠、展开

lanhy
发布于 2020-9-1 10:33
浏览
0收藏

透视表是依据已有数据源来创建的交互式表格,我们可在excel中创建透视表,也可编辑已有透视表。本文以创建透视表、刷新透视表以及设置透视表的行展开或折叠为例,介绍具体的操作方法。

 

所需工具:Free Spire.XLS for Java免费版,编辑代码前,先下载导入jar到Java程序(可手动 下载导入,或通过 Maven仓库下载导入)。

示例代码
1. 创建透视表

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();
     }
 }

透视表创建结果:Java 创建、刷新Excel透视表/设置透视表行折叠、展开-鸿蒙开发者社区

2. 刷新透视表
 

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);
     }
 }

透视表更新前后效果:Java 创建、刷新Excel透视表/设置透视表行折叠、展开-鸿蒙开发者社区

3. 折叠、展开透视表中的行

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 创建、刷新Excel透视表/设置透视表行折叠、展开-鸿蒙开发者社区

分类
已于2020-9-2 18:13:15修改
收藏
回复
举报
回复
    相关推荐