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.10.5</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 天的临时许可证。
 



 
					



