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