【问题标题】:Linking a slicer to multiple pivot tables using office scripts使用 office 脚本将切片器链接到多个数据透视表
【发布时间】:2023-01-13 09:37:29
【问题描述】:

我正在尝试添加一个切片器以使用 Office 脚本连接到 Excel 中的多个数据透视表。办公室脚本似乎只能将 1 个切片器连接到 1 个数据透视表。记录操作似乎无法记录数据透视表切片器设置中的连接操作。

  let newSlicer = workbook.addSlicer(newPivotTable, newPivotTable.getHierarchy("Overdue").getFields()[0], selectedSheet);

上面的脚本似乎不能传入多个数据透视表。有人对此有解决方案吗?非常感谢。

【问题讨论】:

  • 数据透视表是否从同一个源表中读取?如果是这样,您也许可以尝试将切片器连接到它并查看它是否会过滤数据透视表
  • 是的,对于这种情况,所有数据透视表都来自同一来源。手动连接切片器工作正常。但我需要的是通过办公脚本。
  • 这可能不受支持。在 VBA 中,当您将其他数据透视表添加到切片器时,它们将添加到 SlicerCache。它看起来不像 Office 脚本或 Office.js 有 SlicerCache 对象。我找到了解决方法。但我不确定它是否适合你的情况。我会发布我的代码作为答案。

标签: excel office-scripts


【解决方案1】:

我认为目前不支持将多个数据透视表链接到切片器。但可能有解决方法。您可以运行下面的 Office 脚本代码。您必须使用您自己的数据透视表的名称、切片器的字段等更新变量:

    function main(workbook:ExcelScript.Workbook){
      let sh: ExcelScript.Worksheet = workbook.getActiveWorksheet();
      let slicer1: ExcelScript.Slicer = getOrAddSlicer("PivotTable1","Col1",workbook);
      let slicer2: ExcelScript.Slicer = getOrAddSlicer("PivotTable1", "Col2", workbook);
    }
    
    function getOrAddSlicer(ptName:string,ptRowHierarchyName: string, workbook:ExcelScript.Workbook): ExcelScript.Slicer {
      let sh: ExcelScript.Worksheet = workbook.getActiveWorksheet();
      let pt: ExcelScript.PivotTable = sh.getPivotTable(ptName);
      let pf: ExcelScript.PivotField = pt.getRowHierarchy(ptRowHierarchyName).getPivotField(ptRowHierarchyName);
      let slicer: ExcelScript.Slicer = workbook.getSlicer(ptRowHierarchyName);
      if (slicer === undefined) {
        slicer = workbook.addSlicer(pt, pf, sh);
      }
      return slicer;
    }

getOrAddSlicer 函数将切片器添加到活动工作表。或者在活动工作表上选择一个切片器,该切片器链接到特定字段(如果之前已添加)。添加所有切片器后,您可以复制并粘贴切片器链接到的数据透视表。复制并粘贴 PT 后,两个数据透视表也应该链接到所有切片器。

【讨论】:

  • 这是记录器生成的代码,屏幕上会出现 4 个切片器。让 newSlicer = workbook.addSlicer(newPivotTable, newPivotTable.getHierarchy("Date").getFields()[0], sheet1);让 newSlicer1 = workbook.addSlicer(newPivotTable, newPivotTable.getHierarchy("Name").getFields()[0], sheet1);让 newSlicer2 = workbook.addSlicer(newPivotTable1, newPivotTable1.getHierarchy("Date").getFields()[0], sheet1);让 newSlicer3 = workbook.addSlicer(newPivotTable1, newPivotTable1.getHierarchy("Name").getFields()[0], sheet1);
  • 我想要的是 2 个切片器,每个切片器都能够连接到 2 个数据透视表。因此,根据您的代码,我该如何更改为解决方法?
  • 如果要将多个切片器链接到数据透视表,您将遵循类似的过程。您首先必须添加要与数据透视表关联的所有切片器。在你这样做之后,复制并粘贴数据透视表,这样你就有了两个 PT。我将更新我的代码以显示它的外观。
猜你喜欢
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
  • 2021-09-02
  • 2023-02-14
  • 2020-06-21
相关资源
最近更新 更多