diff --git a/ClosedXML/ClosedXML.csproj b/ClosedXML/ClosedXML.csproj
index 4012c76..4e430ca 100644
--- a/ClosedXML/ClosedXML.csproj
+++ b/ClosedXML/ClosedXML.csproj
@@ -138,6 +138,7 @@
+
diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTableTheme.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTableTheme.cs
new file mode 100644
index 0000000..a0a86eb
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Tables/XLTableTheme.cs
@@ -0,0 +1,121 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+
+namespace ClosedXML.Excel
+{
+ public sealed class XLTableTheme
+ {
+ public static readonly XLTableTheme None = new XLTableTheme("None");
+ public static readonly XLTableTheme TableStyleMedium28 = new XLTableTheme("TableStyleMedium28");
+ public static readonly XLTableTheme TableStyleMedium27 = new XLTableTheme("TableStyleMedium27");
+ public static readonly XLTableTheme TableStyleMedium26 = new XLTableTheme("TableStyleMedium26");
+ public static readonly XLTableTheme TableStyleMedium25 = new XLTableTheme("TableStyleMedium25");
+ public static readonly XLTableTheme TableStyleMedium24 = new XLTableTheme("TableStyleMedium24");
+ public static readonly XLTableTheme TableStyleMedium23 = new XLTableTheme("TableStyleMedium23");
+ public static readonly XLTableTheme TableStyleMedium22 = new XLTableTheme("TableStyleMedium22");
+ public static readonly XLTableTheme TableStyleMedium21 = new XLTableTheme("TableStyleMedium21");
+ public static readonly XLTableTheme TableStyleMedium20 = new XLTableTheme("TableStyleMedium20");
+ public static readonly XLTableTheme TableStyleMedium19 = new XLTableTheme("TableStyleMedium19");
+ public static readonly XLTableTheme TableStyleMedium18 = new XLTableTheme("TableStyleMedium18");
+ public static readonly XLTableTheme TableStyleMedium17 = new XLTableTheme("TableStyleMedium17");
+ public static readonly XLTableTheme TableStyleMedium16 = new XLTableTheme("TableStyleMedium16");
+ public static readonly XLTableTheme TableStyleMedium15 = new XLTableTheme("TableStyleMedium15");
+ public static readonly XLTableTheme TableStyleMedium14 = new XLTableTheme("TableStyleMedium14");
+ public static readonly XLTableTheme TableStyleMedium13 = new XLTableTheme("TableStyleMedium13");
+ public static readonly XLTableTheme TableStyleMedium12 = new XLTableTheme("TableStyleMedium12");
+ public static readonly XLTableTheme TableStyleMedium11 = new XLTableTheme("TableStyleMedium11");
+ public static readonly XLTableTheme TableStyleMedium10 = new XLTableTheme("TableStyleMedium10");
+ public static readonly XLTableTheme TableStyleMedium9 = new XLTableTheme("TableStyleMedium9");
+ public static readonly XLTableTheme TableStyleMedium8 = new XLTableTheme("TableStyleMedium8");
+ public static readonly XLTableTheme TableStyleMedium7 = new XLTableTheme("TableStyleMedium7");
+ public static readonly XLTableTheme TableStyleMedium6 = new XLTableTheme("TableStyleMedium6");
+ public static readonly XLTableTheme TableStyleMedium5 = new XLTableTheme("TableStyleMedium5");
+ public static readonly XLTableTheme TableStyleMedium4 = new XLTableTheme("TableStyleMedium4");
+ public static readonly XLTableTheme TableStyleMedium3 = new XLTableTheme("TableStyleMedium3");
+ public static readonly XLTableTheme TableStyleMedium2 = new XLTableTheme("TableStyleMedium2");
+ public static readonly XLTableTheme TableStyleMedium1 = new XLTableTheme("TableStyleMedium1");
+ public static readonly XLTableTheme TableStyleLight21 = new XLTableTheme("TableStyleLight21");
+ public static readonly XLTableTheme TableStyleLight20 = new XLTableTheme("TableStyleLight20");
+ public static readonly XLTableTheme TableStyleLight19 = new XLTableTheme("TableStyleLight19");
+ public static readonly XLTableTheme TableStyleLight18 = new XLTableTheme("TableStyleLight18");
+ public static readonly XLTableTheme TableStyleLight17 = new XLTableTheme("TableStyleLight17");
+ public static readonly XLTableTheme TableStyleLight16 = new XLTableTheme("TableStyleLight16");
+ public static readonly XLTableTheme TableStyleLight15 = new XLTableTheme("TableStyleLight15");
+ public static readonly XLTableTheme TableStyleLight14 = new XLTableTheme("TableStyleLight14");
+ public static readonly XLTableTheme TableStyleLight13 = new XLTableTheme("TableStyleLight13");
+ public static readonly XLTableTheme TableStyleLight12 = new XLTableTheme("TableStyleLight12");
+ public static readonly XLTableTheme TableStyleLight11 = new XLTableTheme("TableStyleLight11");
+ public static readonly XLTableTheme TableStyleLight10 = new XLTableTheme("TableStyleLight10");
+ public static readonly XLTableTheme TableStyleLight9 = new XLTableTheme("TableStyleLight9");
+ public static readonly XLTableTheme TableStyleLight8 = new XLTableTheme("TableStyleLight8");
+ public static readonly XLTableTheme TableStyleLight7 = new XLTableTheme("TableStyleLight7");
+ public static readonly XLTableTheme TableStyleLight6 = new XLTableTheme("TableStyleLight6");
+ public static readonly XLTableTheme TableStyleLight5 = new XLTableTheme("TableStyleLight5");
+ public static readonly XLTableTheme TableStyleLight4 = new XLTableTheme("TableStyleLight4");
+ public static readonly XLTableTheme TableStyleLight3 = new XLTableTheme("TableStyleLight3");
+ public static readonly XLTableTheme TableStyleLight2 = new XLTableTheme("TableStyleLight2");
+ public static readonly XLTableTheme TableStyleLight1 = new XLTableTheme("TableStyleLight1");
+ public static readonly XLTableTheme TableStyleDark11 = new XLTableTheme("TableStyleDark11");
+ public static readonly XLTableTheme TableStyleDark10 = new XLTableTheme("TableStyleDark10");
+ public static readonly XLTableTheme TableStyleDark9 = new XLTableTheme("TableStyleDark9");
+ public static readonly XLTableTheme TableStyleDark8 = new XLTableTheme("TableStyleDark8");
+ public static readonly XLTableTheme TableStyleDark7 = new XLTableTheme("TableStyleDark7");
+ public static readonly XLTableTheme TableStyleDark6 = new XLTableTheme("TableStyleDark6");
+ public static readonly XLTableTheme TableStyleDark5 = new XLTableTheme("TableStyleDark5");
+ public static readonly XLTableTheme TableStyleDark4 = new XLTableTheme("TableStyleDark4");
+ public static readonly XLTableTheme TableStyleDark3 = new XLTableTheme("TableStyleDark3");
+ public static readonly XLTableTheme TableStyleDark2 = new XLTableTheme("TableStyleDark2");
+ public static readonly XLTableTheme TableStyleDark1 = new XLTableTheme("TableStyleDark1");
+
+ public string Name { get; private set; }
+
+ public XLTableTheme(string name)
+ {
+ this.Name = name;
+ }
+
+ private static IEnumerable allThemes;
+
+ public static IEnumerable GetAllThemes()
+ {
+ return (allThemes ?? (allThemes = typeof(XLTableTheme).GetFields(BindingFlags.Static | BindingFlags.Public)
+ .Where(fi => fi.FieldType.Equals(typeof(XLTableTheme)))
+ .Select(fi => (XLTableTheme)fi.GetValue(null))
+ .ToArray()));
+ }
+
+ public static XLTableTheme FromName(string name)
+ {
+ return GetAllThemes().FirstOrDefault(s => s.Name == name);
+ }
+
+ #region Overrides
+
+ public override bool Equals(object obj)
+ {
+ if (obj == null)
+ {
+ return false;
+ }
+ XLTableTheme theme = obj as XLTableTheme;
+ if (theme == null)
+ {
+ return false;
+ }
+ return this.Name.Equals(theme.Name);
+ }
+
+ public override int GetHashCode()
+ {
+ return this.Name.GetHashCode();
+ }
+
+ public override string ToString()
+ {
+ return this.Name;
+ }
+
+ #endregion Overrides
+ }
+}
\ No newline at end of file
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Loading/LoadingTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Loading/LoadingTests.cs
new file mode 100644
index 0000000..5412c0a
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Loading/LoadingTests.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.IO;
+using System.Linq;
+using ClosedXML.Excel;
+using NUnit.Framework;
+
+namespace ClosedXML_Tests.Excel
+{
+ // Tests in this fixture test only the successful loading of existing Excel files,
+ // i.e. we test that ClosedXML doesn't choke on a given input file
+ // These tests DO NOT test that ClosedXML successfully recognises all the Excel parts or that it can successfully save those parts again.
+ [TestFixture]
+ public class LoadingTests
+ {
+ [Test]
+ public void CanSuccessfullyLoadFiles()
+ {
+ var files = new List()
+ {
+ @"Misc\TableWithCustomTheme.xlsx"
+ };
+
+ foreach (var file in files)
+ {
+ TestHelper.LoadFile(file);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Misc/TableWithCustomTheme.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Misc/TableWithCustomTheme.xlsx
new file mode 100644
index 0000000..ecca2ee
--- /dev/null
+++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Misc/TableWithCustomTheme.xlsx
Binary files differ
diff --git a/ClosedXML/Excel/Tables/IXLTable.cs b/ClosedXML/Excel/Tables/IXLTable.cs
index ded04e3..e109f6d 100644
--- a/ClosedXML/Excel/Tables/IXLTable.cs
+++ b/ClosedXML/Excel/Tables/IXLTable.cs
@@ -2,71 +2,6 @@
using System.Collections.Generic;
namespace ClosedXML.Excel
{
- public enum XLTableTheme
- {
- TableStyleMedium28,
- TableStyleMedium27,
- TableStyleMedium26,
- TableStyleMedium25,
- TableStyleMedium24,
- TableStyleMedium23,
- TableStyleMedium22,
- TableStyleMedium21,
- TableStyleMedium20,
- TableStyleMedium19,
- TableStyleMedium18,
- TableStyleMedium17,
- TableStyleMedium16,
- TableStyleMedium15,
- TableStyleMedium14,
- TableStyleMedium13,
- TableStyleMedium12,
- TableStyleMedium11,
- TableStyleMedium10,
- TableStyleMedium9,
- TableStyleMedium8,
- TableStyleMedium7,
- TableStyleMedium6,
- TableStyleMedium5,
- TableStyleMedium4,
- TableStyleMedium3,
- TableStyleMedium2,
- TableStyleMedium1,
- TableStyleLight21,
- TableStyleLight20,
- TableStyleLight19,
- TableStyleLight18,
- TableStyleLight17,
- TableStyleLight16,
- TableStyleLight15,
- TableStyleLight14,
- TableStyleLight13,
- TableStyleLight12,
- TableStyleLight11,
- TableStyleLight10,
- TableStyleLight9,
- TableStyleLight8,
- TableStyleLight7,
- TableStyleLight6,
- TableStyleLight5,
- TableStyleLight4,
- TableStyleLight3,
- TableStyleLight2,
- TableStyleLight1,
- TableStyleDark11,
- TableStyleDark10,
- TableStyleDark9,
- TableStyleDark8,
- TableStyleDark7,
- TableStyleDark6,
- TableStyleDark5,
- TableStyleDark4,
- TableStyleDark3,
- TableStyleDark2,
- TableStyleDark1,
- None
- }
-
public interface IXLTable : IXLRange
{
string Name { get; set; }
diff --git a/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/Excel/XLWorkbook_Load.cs
index 2fc655e..4c3424f 100644
--- a/ClosedXML/Excel/XLWorkbook_Load.cs
+++ b/ClosedXML/Excel/XLWorkbook_Load.cs
@@ -268,7 +268,13 @@
if (dTable.TableStyleInfo.ShowColumnStripes != null)
xlTable.ShowColumnStripes = dTable.TableStyleInfo.ShowColumnStripes.Value;
if (dTable.TableStyleInfo.Name != null)
- xlTable.Theme = (XLTableTheme) Enum.Parse(typeof (XLTableTheme), dTable.TableStyleInfo.Name.Value);
+ {
+ var theme = XLTableTheme.FromName(dTable.TableStyleInfo.Name.Value);
+ if (theme != null)
+ xlTable.Theme = theme;
+ else
+ xlTable.Theme = new XLTableTheme(dTable.TableStyleInfo.Name.Value);
+ }
else
xlTable.Theme = XLTableTheme.None;
}
diff --git a/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/Excel/XLWorkbook_Save.cs
index 0bfa65c..0e14564 100644
--- a/ClosedXML/Excel/XLWorkbook_Save.cs
+++ b/ClosedXML/Excel/XLWorkbook_Save.cs
@@ -1744,7 +1744,7 @@
};
if (xlTable.Theme != XLTableTheme.None)
- tableStyleInfo1.Name = Enum.GetName(typeof(XLTableTheme), xlTable.Theme);
+ tableStyleInfo1.Name = xlTable.Theme.Name;
if (xlTable.ShowAutoFilter)
{
diff --git a/ClosedXML_Net3.5/ClosedXML_Net3.5.csproj b/ClosedXML_Net3.5/ClosedXML_Net3.5.csproj
index f057b4d..cedc4a3 100644
--- a/ClosedXML_Net3.5/ClosedXML_Net3.5.csproj
+++ b/ClosedXML_Net3.5/ClosedXML_Net3.5.csproj
@@ -831,6 +831,9 @@
Excel\Tables\XLTables.cs
+
+ Excel\Tables\XLTableTheme.cs
+
Excel\XLConstants.cs
diff --git a/ClosedXML_Tests/ClosedXML_Tests.csproj b/ClosedXML_Tests/ClosedXML_Tests.csproj
index 0342658..3574e8b 100644
--- a/ClosedXML_Tests/ClosedXML_Tests.csproj
+++ b/ClosedXML_Tests/ClosedXML_Tests.csproj
@@ -118,6 +118,7 @@
+
@@ -283,6 +284,7 @@
+
diff --git a/ClosedXML_Tests/TestHelper.cs b/ClosedXML_Tests/TestHelper.cs
index eb02623..be509a2 100644
--- a/ClosedXML_Tests/TestHelper.cs
+++ b/ClosedXML_Tests/TestHelper.cs
@@ -89,5 +89,17 @@
}
#pragma warning restore 162
}
+
+ public static void LoadFile(string filePartName)
+ {
+ var extractor = new ResourceFileExtractor(null, ".Resource.");
+
+ string resourcePath = filePartName.Replace('\\', '.').TrimStart('.');
+ using (var stream = extractor.ReadFileFromResToStream(resourcePath))
+ {
+ var wb = new XLWorkbook(stream);
+ wb.Dispose();
+ }
+ }
}
}
\ No newline at end of file