C++経由のGolangによるスライサーの更新

可能な使用シナリオ

スライサーの更新とは、スライサーが接続されているピボットテーブルまたはテーブルのデータをフィルター処理することを意味します。Microsoft Excelでスライサーのアイテムを選択または選択解除すると、リンクされたピボットテーブルまたはテーブルがそれに応じて再計算されます。Aspose.Cells for Go via C++では、スライサーキャッシュアイテムを反復処理してスライサーを手動でリフレッシュする必要はありません。Slicer.SelectItems(labels, append)メソッドがスライサーを更新し、フィルターアイテムから直接、リンクされたピボットテーブルまたはテーブルを再計算します:

  • Slicer.SelectItems(labels, append) — 指定されたラベルを選択し、リンクされたピボットテーブルまたはテーブルを再計算します。appendがtrueの場合は元々選択されていたラベルが保持され、指定されたラベルが選択に追加されます。appendがfalseの場合は元の選択がすべてクリアされ、指定されたラベルのみが選択された状態になります。
  • Slicer.UnselectItems(labels) — 現在選択されているアイテムの一部を選択解除します。
  • Slicer.ClearFilter() — フィルターを解除してすべてのアイテムを選択します。

スライサーの更新方法

次のサンプルコードは、ピボットテーブルに接続された既存のスライサーを含むサンプルExcelファイルを読み込みます。Slicer.SelectItems(labels, false)を使用してスライサーの"Blue"と"Pink"のアイテムのみを選択すると、ピボットテーブルはフィルターアイテムから直接再計算され、手動でのSlicer.Refresh()の呼び出しは不要です。その後、ワークブックを出力Excelファイルとして保存します。次のスクリーンショットは、サンプルコードがサンプルExcelファイルに与える影響を示しています。スクリーンショットでわかるように、ピボットテーブルにはフィルターされたアイテムのみが表示されます。

サンプルコード

現在の選択を置き換え(指定されたラベルのみが選択された状態になります)、リンクされたピボットテーブルまたはテーブルを再計算します:

package main

import (
    "fmt"

    . "github.com/aspose-cells/aspose-cells-go-cpp/v26"
)

func main() {
    // Load sample Excel file containing slicer.
    wb, _ := NewWorkbook_String("sampleUpdatingSlicer.xlsx")

    // Access first worksheet.
    wss, _ := wb.GetWorksheets()
    ws, _ := wss.Get_Int(0)

    // Access the first slicer inside the slicer collection.
    slicers, _ := ws.GetSlicers()
    slicer, _ := slicers.Get_Int(0)

    // Select only "Blue" and "Pink"; the linked pivot table or table
    // is recalculated directly from the filter items.
    slicer.SelectItems([]string{ "Blue", "Pink" }, false)

    // Save the modified workbook.
    wb.Save_String("out.xlsx")

    fmt.Println("Slicer updated and workbook saved successfully!")
}

現在選択されているラベルを保持したまま、さらにアイテムを選択します:

// Keep the current selection and add "Red" to it.
slicer.SelectItems([]string{ "Red" }, true)

選択されたアイテムの一部を選択解除します:

// Remove "Pink" from the current selection.
slicer.UnselectItems([]string{ "Pink" })

フィルターを解除します(すべてのアイテムを選択します):

// Clear the filter; all slicer items become selected again.
slicer.ClearFilter()