diff --git a/src/EPPlus/Drawing/Slicer/ExcelSlicerCache.cs b/src/EPPlus/Drawing/Slicer/ExcelSlicerCache.cs
index 790b3daeed..6885a2fd89 100644
--- a/src/EPPlus/Drawing/Slicer/ExcelSlicerCache.cs
+++ b/src/EPPlus/Drawing/Slicer/ExcelSlicerCache.cs
@@ -23,6 +23,7 @@ namespace OfficeOpenXml.Drawing.Slicer
///
public abstract class ExcelSlicerCache : XmlHelper
{
+ const string _extPath = "x14:extLst/d:ext";
internal ExcelSlicerCache(XmlNamespaceManager nameSpaceManager) : base(nameSpaceManager)
{
}
@@ -108,5 +109,35 @@ internal void CreateWorkbookReference(ExcelWorkbook wb, string uriGuid)
var element = (XmlElement)xh.CreateNode("x14:slicerCache", false, true);
element.SetAttribute("id", ExcelPackage.schemaRelationships, CacheRel.Id);
}
+
+ const string _hideItemsWithNoDataPath = "x15:slicerCacheHideItemsWithNoData";
+ ///
+ /// If true, items that have no data are not displayed
+ ///
+ public bool HideItemsWithNoData
+ {
+ get
+ {
+ return ExistsNode(_extPath + "/" + _hideItemsWithNoDataPath);
+ }
+ set
+ {
+ if (value)
+ {
+ var node = CreateNode("x14:extLst/d:ext", false, true);
+ ((XmlElement)node).SetAttribute("uri", ExtLstUris.SlicerCacheHideItemsWithNoDataUri);
+ var helper = XmlHelperFactory.Create(NameSpaceManager, node);
+ helper.CreateNode(_hideItemsWithNoDataPath, false, true);
+ }
+ else
+ {
+ var hideNode = GetNode(_extPath + "/" + _hideItemsWithNoDataPath);
+ if (hideNode != null)
+ {
+ hideNode.ParentNode.ParentNode.RemoveChild(hideNode.ParentNode);
+ }
+ }
+ }
+ }
}
}
diff --git a/src/EPPlus/Drawing/Slicer/ExcelTableSlicerCache.cs b/src/EPPlus/Drawing/Slicer/ExcelTableSlicerCache.cs
index 12ffa05fa4..39ebf6e4c6 100644
--- a/src/EPPlus/Drawing/Slicer/ExcelTableSlicerCache.cs
+++ b/src/EPPlus/Drawing/Slicer/ExcelTableSlicerCache.cs
@@ -118,35 +118,6 @@ public bool CustomListSort
SetXmlNodeBool(_customListSortPath, value, true);
}
}
- const string _hideItemsWithNoDataPath = "x15:slicerCacheHideItemsWithNoData";
- ///
- /// If true, items that have no data are not displayed
- ///
- public bool HideItemsWithNoData
- {
- get
- {
- return ExistsNode(_extPath +"/" + _hideItemsWithNoDataPath);
- }
- set
- {
- if(value)
- {
- var node = CreateNode("x14:extLst/d:ext",false,true);
- ((XmlElement)node).SetAttribute("uri", "{470722E0-AACD-4C17-9CDC-17EF765DBC7E}");
- var helper = XmlHelperFactory.Create(NameSpaceManager, node);
- helper.CreateNode(_hideItemsWithNoDataPath, false, true);
- }
- else
- {
- var hideNode = GetNode(_extPath + "/" + _hideItemsWithNoDataPath);
- if(hideNode!=null)
- {
- hideNode.ParentNode.ParentNode.RemoveChild(hideNode.ParentNode);
- }
- }
- }
- }
const string _columnIndexPath = _topPath + "/@column";
internal int ColumnId
{
diff --git a/src/EPPlusTest/Table/PivotTable/Calculation/PivotTableCalculationSlicerTests.cs b/src/EPPlusTest/Table/PivotTable/Calculation/PivotTableCalculationSlicerTests.cs
index b954474c55..b6b0363c9f 100644
--- a/src/EPPlusTest/Table/PivotTable/Calculation/PivotTableCalculationSlicerTests.cs
+++ b/src/EPPlusTest/Table/PivotTable/Calculation/PivotTableCalculationSlicerTests.cs
@@ -15,7 +15,7 @@ namespace EPPlusTest.Table.PivotTable.Calculation
public class PivotTableCalculationSlicerTests : TestBase
{
static ExcelPackage _pck;
- static ExcelTable _tbl1, _tbl2;
+ static ExcelTable _tbl1, _tbl2, _tbl3;
[ClassInitialize]
public static void Init(TestContext context)
{
@@ -27,6 +27,10 @@ public static void Init(TestContext context)
ws = _pck.Workbook.Worksheets.Add("Data2");
r = LoadItemData(ws);
_tbl2 = ws.Tables.Add(r, "Table2");
+ ws = _pck.Workbook.Worksheets.Add("Data3");
+ r = LoadItemData(ws);
+ ws.Cells["N10:N11"].Value = null;
+ _tbl3 = ws.Tables.Add(r, "Table3");
}
[ClassCleanup]
public static void Cleanup()
@@ -91,5 +95,25 @@ public void FilterSlicerMultipleItems()
Assert.AreEqual(ErrorValues.RefError, ws.Cells["F7"].Value);
Assert.AreEqual(358.8, ws.Cells["F8"].Value);
}
- }
+
+ [TestMethod]
+ public void FilterSlicerMultipleItemsHideWithNoData()
+ {
+ var ws = _pck.Workbook.Worksheets.Add("PivotSlicerWithNoData");
+ var pt = ws.PivotTables.Add(ws.Cells["C3"], _tbl3, "PivotTableSlicerSingle");
+ pt.RowFields.Add(pt.Fields[0]);
+ var slicer = pt.Fields[0].AddSlicer();
+ slicer.SetPosition(1, 0, 8, 0);
+ pt.CacheDefinition.Refresh();
+ var df = pt.DataFields.Add(pt.Fields["Price"]);
+
+ Assert.AreEqual(slicer.Cache.Data.Items.Count, 6);
+
+ slicer.Cache.HideItemsWithNoData = true;
+ slicer.Cache.Data.Items.Refresh();
+
+ Assert.AreEqual(slicer.Cache.Data.Items[4].Hidden, false);
+ Assert.AreEqual(slicer.Cache.Data.Items[5].Hidden, false);
+ }
+ }
}
\ No newline at end of file