Excel 中的切片器是一种交互式过滤工具,可以简化透视表和表格中的数据分析。与传统的下拉菜单不同,切片器提供直观的可点击按钮,每个按钮代表数据集中一个不同的值(例如,地区、产品类别或日期)。使用切片器,用户可以通过单击快速过滤数据集,以专注于特定子集,从而使分析更快、更具视觉直观性。这篇文章将介绍如何使用 Java 和 Spire.XLS for Java 库在 Excel 中添加切片器、修改现有切片器和删除切片器。
安装 Spire.XLS for Java
首先,您需要在 Java 程序中添加 Spire.Xls.jar 文件作为依赖项。您可以从此链接下载 JAR 文件;如果您使用 Maven,则可以通过在 pom.xml 文件中添加以下代码导入 JAR 文件。
<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>15.4.0</version>
</dependency>
</dependencies>
Java 为 Excel 表格添加切片器
Spire.XLS for Java 提供了 Worksheet.getSlicers().add(IListObject table, String destCellName, int index) 方法,用于为 Excel 工作表中的表格添加切片器。具体步骤如下:
- 创建 Workbook 类的对象。
- 使用 Workbook.getWorksheets().get(0) 方法获取第一个工作表。
- 使用 Worksheet.getRange().get().setValue() 和 Worksheet.getRange().get().setNumberValue() 方法向工作表添加数据。
- 使用 Worksheet.getIListObjects().create() 方法向工作表添加表格。
- 使用 Worksheet.getSlicers().add(IListObject table, String destCellName, int index) 方法为表格添加切片器。
- 使用 Workbook.saveToFile() 方法保存结果文件。
- Java
import com.spire.xls.*;
import com.spire.xls.core.IListObject;
import com.spire.xls.core.spreadsheet.slicer.*;
public class AddSlicerToTable {
public static void main(String[] args) {
// 创建 Workbook 类的对象
Workbook workbook = new Workbook();
// 获取第一个工作表
Worksheet worksheet = workbook.getWorksheets().get(0);
// 向工作表添加数据
worksheet.getRange().get("A1").setValue("产品");
worksheet.getRange().get("A2").setValue("葡萄");
worksheet.getRange().get("A3").setValue("蓝莓");
worksheet.getRange().get("A4").setValue("奇异果");
worksheet.getRange().get("A5").setValue("樱桃");
worksheet.getRange().get("A6").setValue("葡萄");
worksheet.getRange().get("A7").setValue("蓝莓");
worksheet.getRange().get("A8").setValue("奇异果");
worksheet.getRange().get("A9").setValue("樱桃");
worksheet.getRange().get("B1").setValue("年份");
worksheet.getRange().get("B2").setNumberValue(2020);
worksheet.getRange().get("B3").setNumberValue(2020);
worksheet.getRange().get("B4").setNumberValue(2020);
worksheet.getRange().get("B5").setNumberValue(2020);
worksheet.getRange().get("B6").setNumberValue(2021);
worksheet.getRange().get("B7").setNumberValue(2021);
worksheet.getRange().get("B8").setNumberValue(2021);
worksheet.getRange().get("B9").setNumberValue(2021);
worksheet.getRange().get("C1").setValue("销售额");
worksheet.getRange().get("C2").setNumberValue(50);
worksheet.getRange().get("C3").setNumberValue(60);
worksheet.getRange().get("C4").setNumberValue(70);
worksheet.getRange().get("C5").setNumberValue(80);
worksheet.getRange().get("C6").setNumberValue(90);
worksheet.getRange().get("C7").setNumberValue(100);
worksheet.getRange().get("C8").setNumberValue(110);
worksheet.getRange().get("C9").setNumberValue(120);
// 创建表格
IListObject table = worksheet.getListObjects().create("产品销售数据", worksheet.getRange().get("A1:C9"));
// 向单元格 "A11" 添加切片器
XlsSlicerCollection slicers = worksheet.getSlicers();
int index = slicers.add(table, "A11", 0);
// 设置切片器的名称和样式
XlsSlicer slicer = slicers.get(index);
slicer.setName("产品");
slicer.setStyleType(SlicerStyleType.SlicerStyleLight1);
// 保存结果文件
workbook.saveToFile("表格切片器.xlsx", ExcelVersion.Version2013);
workbook.dispose();
}
}
Java 为 Excel 数据透视表添加切片器
除了给 Excel 中的表格添加切片器,Spire.XLS for Java 还提供了 Worksheet.getSlicers().add(IPivotTable pivot, String destCellName, int baseFieldIndex) 方法,支持为数据透视表添加切片器。具体步骤如下:
- 创建 Workbook 类的对象。
- 使用 Workbook.getWorksheets().get(0) 方法获取第一个工作表。
- 使用 Worksheet.getRange().get().setValue() 和 Worksheet.getRange().get().setNumberValue() 方法向工作表添加数据。
- 使用 Workbook.getPivotCaches().add() 方法创建数据透视缓存。
- 使用 Worksheet.getPivotTables().add() 方法基于数据透视缓存创建数据透视表。
- 拖动字段到行、列和数据区域,并计算数据透视表数据。
- 使用 Worksheet.getSlicers().add(IPivotTable pivot, String destCellName, int baseFieldIndex) 方法为数据透视表添加切片器。
- 设置切片器的属性,例如名称、宽度、高度、样式和交叉过滤类型。
- 再次计算数据透视表数据。
- 使用 Workbook.saveToFile() 方法保存结果文件。
- Java
import com.spire.xls.*;
import com.spire.xls.core.IPivotField;
import com.spire.xls.core.spreadsheet.slicer.*;
public class AddSlicerToPivotTable {
public static void main(String[] args) {
// 创建 Workbook 类的对象
Workbook workbook = new Workbook();
// 获取第一个工作表
Worksheet worksheet = workbook.getWorksheets().get(0);
// 向工作表添加数据
worksheet.getRange().get("A1").setValue("产品");
worksheet.getRange().get("A2").setValue("葡萄");
worksheet.getRange().get("A3").setValue("蓝莓");
worksheet.getRange().get("A4").setValue("奇异果");
worksheet.getRange().get("A5").setValue("樱桃");
worksheet.getRange().get("A6").setValue("葡萄");
worksheet.getRange().get("A7").setValue("蓝莓");
worksheet.getRange().get("A8").setValue("奇异果");
worksheet.getRange().get("A9").setValue("樱桃");
worksheet.getRange().get("B1").setValue("年份");
worksheet.getRange().get("B2").setNumberValue(2020);
worksheet.getRange().get("B3").setNumberValue(2020);
worksheet.getRange().get("B4").setNumberValue(2020);
worksheet.getRange().get("B5").setNumberValue(2020);
worksheet.getRange().get("B6").setNumberValue(2021);
worksheet.getRange().get("B7").setNumberValue(2021);
worksheet.getRange().get("B8").setNumberValue(2021);
worksheet.getRange().get("B9").setNumberValue(2021);
worksheet.getRange().get("C1").setValue("销售额");
worksheet.getRange().get("C2").setNumberValue(50);
worksheet.getRange().get("C3").setNumberValue(60);
worksheet.getRange().get("C4").setNumberValue(70);
worksheet.getRange().get("C5").setNumberValue(80);
worksheet.getRange().get("C6").setNumberValue(90);
worksheet.getRange().get("C7").setNumberValue(100);
worksheet.getRange().get("C8").setNumberValue(110);
worksheet.getRange().get("C9").setNumberValue(120);
// 创建数据透视缓存
CellRange dataRange = worksheet.getRange().get("A1:C9");
PivotCache cache = workbook.getPivotCaches().add(dataRange);
// 创建数据透视表
PivotTable pt = worksheet.getPivotTables().add("产品销售数据", worksheet.getRange().get("A12"), cache);
// 拖动字段到行和列区域
IPivotField pf = pt.getPivotFields().get("产品");
pf.setAxis(AxisTypes.Row);
IPivotField pf2 = pt.getPivotFields().get("年份");
pf2.setAxis(AxisTypes.Column);
// 拖动字段到数据区域
pt.getDataFields().add(pt.getPivotFields().get("销售额"), "求和项:销售额", SubtotalTypes.Sum);
// 设置数据透视表样式
pt.setBuiltInStyle(PivotBuiltInStyles.PivotStyleMedium10);
// 计算数据透视表数据
pt.calculateData();
// 为数据透视表添加切片器
XlsSlicerCollection slicers = worksheet.getSlicers();
int index_1 = slicers.add(pt, "F12", 0);
// 设置切片器的名称、宽度、高度和样式
XlsSlicer slicer = slicers.get(index_1);
slicer.setName("产品");
slicer.setWidth(100);
slicer.setHeight(120);
slicer.setStyleType(SlicerStyleType.SlicerStyleLight2);
// 设置切片器的交叉过滤类型
XlsSlicerCache slicerCache = slicer.getSlicerCache();
slicerCache.setCrossFilterType(SlicerCacheCrossFilterType.ShowItemsWithNoData);
// 再次计算数据透视表数据
pt.calculateData();
// 保存结果文件
workbook.saveToFile("数据透视表切片器.xlsx", ExcelVersion.Version2013);
workbook.dispose();
}
}
Java 修改 Excel 中的切片器
你可以使用 XlsSlicer 类下的对应方法来修改切片器的属性,如样式、名称、标题等。具体步骤如下:
- 创建 Workbook 类的对象。
- 使用 Workbook.loadFromFile() 方法加载 Excel 文件。
- 使用 Workbook.getWorksheets().get() 方法获取特定工作表。
- 使用 Worksheet.getSlicers().get() 方法获取工作表中的特定切片器。
- 使用 XlsSlicer 类的相应方法更新切片器的属性,例如样式、名称、标题和交叉过滤类型。
- 使用 Workbook.saveToFile() 方法保存结果文件。
- Java
import com.spire.xls.ExcelVersion;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;
import com.spire.xls.core.spreadsheet.slicer.*;
public class UpdateSlicer {
public static void main(String[] args) {
// 创建 Workbook 类的对象
Workbook workbook = new Workbook();
// 加载 Excel 文件
workbook.loadFromFile("表格切片器.xlsx");
// 获取第一个工作表
Worksheet worksheet = workbook.getWorksheets().get(0);
// 获取工作表中的第一个切片器
XlsSlicer slicer = worksheet.getSlicers().get(0);
// 修改切片器的样式、名称和标题
slicer.setStyleType(SlicerStyleType.SlicerStyleDark4);
slicer.setName("切片器");
slicer.setCaption("切片器");
// 修改切片器的交叉过滤类型
XlsSlicerCache slicerCache = slicer.getSlicerCache();
slicerCache.setCrossFilterType(SlicerCacheCrossFilterType.ShowItemsWithDataAtTop);
// 在切片器中取消选择一个项目
XlsSlicerCacheItemCollection slicerCacheItems = slicerCache.getSlicerCacheItems();
XlsSlicerCacheItem xlsSlicerCacheItem = slicerCacheItems.get(0);
xlsSlicerCacheItem.isSelected(false);
// 保存结果文件
workbook.saveToFile("修改切片器.xlsx", ExcelVersion.Version2013);
workbook.dispose();
}
}
Java 从 Excel 中删除切片器
你可以使用 Worksheet.getSlicers().removeAt() 方法从 Excel 工作表中删除特定切片器,也可以使用 Worksheet.getSlicers().clear() 方法一次性删除所有切片器。具体步骤如下:
- 创建 Workbook 类的对象。
- 使用 Workbook.loadFromFile() 方法加载 Excel 文件。
- 使用 Workbook.getWorksheets().get() 方法获取特定工作表。
- 使用 Worksheet.getSlicers().removeAt() 方法从工作表中删除特定切片器,或者使用 Worksheet.getSlicers().clear() 方法从工作表中删除所有切片器。
- 使用 Workbook.saveToFile() 方法保存结果文件。
- Java
import com.spire.xls.ExcelVersion;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;
public class RemoveSlicer {
public static void main(String[] args) {
// 创建 Workbook 类的对象
Workbook workbook = new Workbook();
// 加载 Excel 文件
workbook.loadFromFile("表格切片器.xlsx");
// 获取第一个工作表
Worksheet worksheet = workbook.getWorksheets().get(0);
// 删除第一个切片器
worksheet.getSlicers().removeAt(0);
// 或删除所有切片器
// worksheet.getSlicers().clear();
// 保存结果文件
workbook.saveToFile("删除切片器.xlsx", ExcelVersion.Version2013);
workbook.dispose();
}
}
申请临时 License
如果您需要去除生成文档中的评估提示或解除功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。