diff --git a/ClosedXML/Excel/PivotTables/IXLPivotTable.cs b/ClosedXML/Excel/PivotTables/IXLPivotTable.cs index 2afdd8c..6f0241a 100644 --- a/ClosedXML/Excel/PivotTables/IXLPivotTable.cs +++ b/ClosedXML/Excel/PivotTables/IXLPivotTable.cs @@ -5,6 +5,7 @@ { public enum XLPivotTableTheme { + None, PivotStyleDark1, PivotStyleDark10, PivotStyleDark11, diff --git a/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/Excel/XLWorkbook_Load.cs index b558cb2..c0274cc 100644 --- a/ClosedXML/Excel/XLWorkbook_Load.cs +++ b/ClosedXML/Excel/XLWorkbook_Load.cs @@ -584,11 +584,15 @@ var pivotTableStyle = pivotTableDefinition.GetFirstChild(); if (pivotTableStyle != null) { - pt.Theme = (XLPivotTableTheme)Enum.Parse(typeof(XLPivotTableTheme), pivotTableStyle.Name); - pt.ShowRowHeaders = pivotTableStyle.ShowRowHeaders; - pt.ShowColumnHeaders = pivotTableStyle.ShowColumnHeaders; - pt.ShowRowStripes = pivotTableStyle.ShowRowStripes; - pt.ShowColumnStripes = pivotTableStyle.ShowColumnStripes; + if (pivotTableStyle.Name != null) + pt.Theme = (XLPivotTableTheme)Enum.Parse(typeof(XLPivotTableTheme), pivotTableStyle.Name); + else + pt.Theme = XLPivotTableTheme.None; + + pt.ShowRowHeaders = OpenXmlHelper.GetBooleanValueAsBool(pivotTableStyle.ShowRowHeaders, false); + pt.ShowColumnHeaders = OpenXmlHelper.GetBooleanValueAsBool(pivotTableStyle.ShowColumnHeaders, false); + pt.ShowRowStripes = OpenXmlHelper.GetBooleanValueAsBool(pivotTableStyle.ShowRowStripes, false); + pt.ShowColumnStripes = OpenXmlHelper.GetBooleanValueAsBool(pivotTableStyle.ShowColumnStripes, false); } // Subtotal configuration diff --git a/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/Excel/XLWorkbook_Save.cs index 9e92af5..40e1ae5 100644 --- a/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/Excel/XLWorkbook_Save.cs @@ -2756,14 +2756,18 @@ pivotTableDefinition.AppendChild(dataFields); } - pivotTableDefinition.AppendChild(new PivotTableStyle + var pts = new PivotTableStyle { - Name = Enum.GetName(typeof(XLPivotTableTheme), pt.Theme), ShowRowHeaders = pt.ShowRowHeaders, ShowColumnHeaders = pt.ShowColumnHeaders, ShowRowStripes = pt.ShowRowStripes, ShowColumnStripes = pt.ShowColumnStripes - }); + }; + + if (pt.Theme != XLPivotTableTheme.None) + pts.Name = Enum.GetName(typeof(XLPivotTableTheme), pt.Theme); + + pivotTableDefinition.AppendChild(pts); #region Excel 2010 Features diff --git a/ClosedXML_Tests/Excel/PivotTables/XLPivotTableTests.cs b/ClosedXML_Tests/Excel/PivotTables/XLPivotTableTests.cs index eddd1a3..2ea11de 100644 --- a/ClosedXML_Tests/Excel/PivotTables/XLPivotTableTests.cs +++ b/ClosedXML_Tests/Excel/PivotTables/XLPivotTableTests.cs @@ -276,6 +276,21 @@ } } + [Test] + public void PivotTableWithNoneTheme() + { + using (var stream = TestHelper.GetStreamFromResource(TestHelper.GetResourcePath(@"Other\PivotTableReferenceFiles\PivotTableWithNoneTheme\inputfile.xlsx"))) + using (var ms = new MemoryStream()) + { + TestHelper.CreateAndCompare(() => + { + var wb = new XLWorkbook(stream); + wb.SaveAs(ms); + return wb; + }, @"Other\PivotTableReferenceFiles\PivotTableWithNoneTheme\outputfile.xlsx"); + } + } + private static void SetFieldOptions(IXLPivotField field, bool withDefaults) { field.SubtotalsAtTop = !withDefaults; diff --git a/ClosedXML_Tests/Resource/Other/PivotTableReferenceFiles/PivotTableWithNoneTheme/inputfile.xlsx b/ClosedXML_Tests/Resource/Other/PivotTableReferenceFiles/PivotTableWithNoneTheme/inputfile.xlsx new file mode 100644 index 0000000..915c374 --- /dev/null +++ b/ClosedXML_Tests/Resource/Other/PivotTableReferenceFiles/PivotTableWithNoneTheme/inputfile.xlsx Binary files differ diff --git a/ClosedXML_Tests/Resource/Other/PivotTableReferenceFiles/PivotTableWithNoneTheme/outputfile.xlsx b/ClosedXML_Tests/Resource/Other/PivotTableReferenceFiles/PivotTableWithNoneTheme/outputfile.xlsx new file mode 100644 index 0000000..3774c71 --- /dev/null +++ b/ClosedXML_Tests/Resource/Other/PivotTableReferenceFiles/PivotTableWithNoneTheme/outputfile.xlsx Binary files differ