diff --git a/ClosedXML/ClosedXML.csproj b/ClosedXML/ClosedXML.csproj
index 97f6610..12b98f0 100644
--- a/ClosedXML/ClosedXML.csproj
+++ b/ClosedXML/ClosedXML.csproj
@@ -1,13 +1,12 @@
-
netstandard2.0;net452;net461
0.9
Manuel de Leon, Amir Ghezelbash, Francois Botha
- ClosedXML makes it easier for developers to create Excel 2007/2010/2013 files. It provides a nice object oriented way to manipulate the files (similar to VBA) without dealing with the hassles of XML Documents. It can be used by any .NET language like C# and Visual Basic (VB).
+ ClosedXML makes it easier for developers to create Excel 2007+ (.xlsx, .xlsm, etc) files. It provides a nice object oriented way to manipulate the files (similar to VBA) without dealing with the hassles of XML Documents. It can be used by any .NET language like C# and VisualBasic.NET.
MIT
https://github.com/ClosedXML/ClosedXML/blob/master/LICENSE
https://github.com/ClosedXML/ClosedXML
@@ -32,7 +31,7 @@
-
+
@@ -42,11 +41,7 @@
-
+
-
-
diff --git a/ClosedXML/Excel/Style/Colors/XLColor_Static.cs b/ClosedXML/Excel/Style/Colors/XLColor_Static.cs
index 13ce341..dd0b672 100644
--- a/ClosedXML/Excel/Style/Colors/XLColor_Static.cs
+++ b/ClosedXML/Excel/Style/Colors/XLColor_Static.cs
@@ -41,12 +41,14 @@
return FromColor(Color.FromArgb(a, r, g, b));
}
-#if _NETFRAMEWORK_
public static XLColor FromKnownColor(KnownColor color)
{
+#if _NETFRAMEWORK_
return FromColor(Color.FromKnownColor(color));
- }
+#else
+ return FromColor(XLColorTranslator.FromKnownColor(color));
#endif
+ }
public static XLColor FromName(String name)
{
return FromColor(Color.FromName(name));
diff --git a/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/Excel/XLWorkbook_Save.cs
index a7d1aa5..79d911d 100644
--- a/ClosedXML/Excel/XLWorkbook_Save.cs
+++ b/ClosedXML/Excel/XLWorkbook_Save.cs
@@ -365,7 +365,8 @@
// Only delete the VmlDrawingParts for comments.
if (vmlDrawingPart != null)
{
- var xdoc = XDocumentExtensions.Load(vmlDrawingPart.GetStream(FileMode.Open));
+ var vmlStream = vmlDrawingPart.GetStream(FileMode.Open);
+ var xdoc = XDocumentExtensions.Load(vmlStream);
//xdoc.Root.Elements().Where(e => e.Name.LocalName == "shapelayout").Remove();
xdoc.Root.Elements().Where(
e => e.Name.LocalName == "shapetype" && (string)e.Attribute("id") == @"_x0000_t202").Remove();
@@ -395,6 +396,7 @@
legacyParts.ForEach(p => vmlDrawingPartNew.AddPart(p, vmlDrawingPart.GetIdOfPart(p)));
}
+ vmlStream.Close();
worksheetPart.DeletePart(vmlDrawingPart);
if (hasNewPart && rId != worksheetPart.GetIdOfPart(vmlDrawingPartNew))
@@ -2409,9 +2411,10 @@
SaveContext context)
{
var ms = new MemoryStream();
- CopyStream(vmlDrawingPart.GetStream(FileMode.OpenOrCreate), ms);
+ var stream = vmlDrawingPart.GetStream(FileMode.OpenOrCreate);
+ CopyStream(stream, ms);
ms.Position = 0;
- var writer = new XmlTextWriter(vmlDrawingPart.GetStream(FileMode.Create), Encoding.UTF8);
+ var writer = new XmlTextWriter(stream, Encoding.UTF8);
writer.WriteStartElement("xml");
diff --git a/ClosedXML/Extensions.cs b/ClosedXML/Extensions.cs
index 38aafd4..4ae1156 100644
--- a/ClosedXML/Extensions.cs
+++ b/ClosedXML/Extensions.cs
@@ -212,8 +212,8 @@
#if _NETSTANDARD_
public static Double GetWidth(this IXLFontBase fontBase, String text)
{
- var textWidth = text.Length * 30;
- double width = (((textWidth / (double)7) * 256) - (128 / 7)) / 256;
+ var textWidth = text.Length * 8.598;
+ double width = textWidth / 7d - 128d / 7 / 256;
width = (double)decimal.Round((decimal)width + 0.2M, 2);
return width;
diff --git a/ClosedXML/NetStandard/KnownColor.cs b/ClosedXML/NetStandard/KnownColor.cs
new file mode 100644
index 0000000..c65973e
--- /dev/null
+++ b/ClosedXML/NetStandard/KnownColor.cs
@@ -0,0 +1,182 @@
+#if _NETSTANDARD_
+namespace ClosedXML.Excel
+{
+ public enum KnownColor
+ {
+ ActiveBorder,
+ ActiveCaption,
+ ActiveCaptionText,
+ AliceBlue,
+ AntiqueWhite,
+ AppWorkspace,
+ Aqua,
+ Aquamarine,
+ Azure,
+ Beige,
+ Bisque,
+ Black,
+ BlanchedAlmond,
+ Blue,
+ BlueViolet,
+ Brown,
+ BurlyWood,
+ ButtonFace,
+ ButtonHighlight,
+ ButtonShadow,
+ CadetBlue,
+ Chartreuse,
+ Chocolate,
+ Control,
+ ControlDark,
+ ControlDarkDark,
+ ControlLight,
+ ControlLightLight,
+ ControlText,
+ Coral,
+ CornflowerBlue,
+ Cornsilk,
+ Crimson,
+ Cyan,
+ DarkBlue,
+ DarkCyan,
+ DarkGoldenrod,
+ DarkGray,
+ DarkGreen,
+ DarkKhaki,
+ DarkMagenta,
+ DarkOliveGreen,
+ DarkOrange,
+ DarkOrchid,
+ DarkRed,
+ DarkSalmon,
+ DarkSeaGreen,
+ DarkSlateBlue,
+ DarkSlateGray,
+ DarkTurquoise,
+ DarkViolet,
+ DeepPink,
+ DeepSkyBlue,
+ Desktop,
+ DimGray,
+ DodgerBlue,
+ Firebrick,
+ FloralWhite,
+ ForestGreen,
+ Fuchsia,
+ Gainsboro,
+ GhostWhite,
+ Gold,
+ Goldenrod,
+ GradientActiveCaption,
+ GradientInactiveCaption,
+ Gray,
+ GrayText,
+ Green,
+ GreenYellow,
+ Highlight,
+ HighlightText,
+ Honeydew,
+ HotPink,
+ HotTrack,
+ InactiveBorder,
+ InactiveCaption,
+ InactiveCaptionText,
+ IndianRed,
+ Indigo,
+ Info,
+ InfoText,
+ Ivory,
+ Khaki,
+ Lavender,
+ LavenderBlush,
+ LawnGreen,
+ LemonChiffon,
+ LightBlue,
+ LightCoral,
+ LightCyan,
+ LightGoldenrodYellow,
+ LightGray,
+ LightGreen,
+ LightPink,
+ LightSalmon,
+ LightSeaGreen,
+ LightSkyBlue,
+ LightSlateGray,
+ LightSteelBlue,
+ LightYellow,
+ Lime,
+ LimeGreen,
+ Linen,
+ Magenta,
+ Maroon,
+ MediumAquamarine,
+ MediumBlue,
+ MediumOrchid,
+ MediumPurple,
+ MediumSeaGreen,
+ MediumSlateBlue,
+ MediumSpringGreen,
+ MediumTurquoise,
+ MediumVioletRed,
+ Menu,
+ MenuBar,
+ MenuHighlight,
+ MenuText,
+ MidnightBlue,
+ MintCream,
+ MistyRose,
+ Moccasin,
+ NavajoWhite,
+ Navy,
+ OldLace,
+ Olive,
+ OliveDrab,
+ Orange,
+ OrangeRed,
+ Orchid,
+ PaleGoldenrod,
+ PaleGreen,
+ PaleTurquoise,
+ PaleVioletRed,
+ PapayaWhip,
+ PeachPuff,
+ Peru,
+ Pink,
+ Plum,
+ PowderBlue,
+ Purple,
+ Red,
+ RosyBrown,
+ RoyalBlue,
+ SaddleBrown,
+ Salmon,
+ SandyBrown,
+ ScrollBar,
+ SeaGreen,
+ SeaShell,
+ Sienna,
+ Silver,
+ SkyBlue,
+ SlateBlue,
+ SlateGray,
+ Snow,
+ SpringGreen,
+ SteelBlue,
+ Tan,
+ Teal,
+ Thistle,
+ Tomato,
+ Transparent,
+ Turquoise,
+ Violet,
+ Wheat,
+ White,
+ WhiteSmoke,
+ Window,
+ WindowFrame,
+ WindowText,
+ Yellow,
+ YellowGreen
+ }
+}
+#endif
\ No newline at end of file
diff --git a/ClosedXML/NetStandard/XLColorTranslator.cs b/ClosedXML/NetStandard/XLColorTranslator.cs
index fadc5cb..112b978 100644
--- a/ClosedXML/NetStandard/XLColorTranslator.cs
+++ b/ClosedXML/NetStandard/XLColorTranslator.cs
@@ -1,4 +1,5 @@
-#if !_NETFRAMEWORK_
+#if _NETSTANDARD_
+using ClosedXML.Excel;
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
@@ -163,8 +164,14 @@
{"black",Color.FromArgb(0, 0, 0)},
};
- private static Regex HexParser = new Regex("^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$");
- private static Regex ShortHexParser = new Regex("^#([0-9a-f]{1})([0-9a-f]{1})([0-9a-f]{1})$");
+ private static Regex HexParser = new Regex("^#([0-9a-f]{2})?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$");
+ private static Regex ShortHexParser = new Regex("^#([0-9a-f]{1})?([0-9a-f]{1})([0-9a-f]{1})([0-9a-f]{1})$");
+
+ public static Color FromKnownColor(KnownColor knownColor)
+ {
+ var s = knownColor.ToString().ToLowerInvariant();
+ return XLColorTranslator.FromHtml(s);
+ }
public static Color FromHtml(string htmlColor)
{
@@ -181,13 +188,20 @@
m = ShortHexParser.Match(id);
if (m.Value == String.Empty)
{
- throw new ArgumentException("Invalid HTML color");
+ throw new ArgumentException("Invalid HTML color: " + htmlColor);
}
}
- return Color.FromArgb(
- Convert.ToInt32(m.Groups[1].Value.PadRight(2, m.Groups[1].Value[0]), 16),
- Convert.ToInt32(m.Groups[2].Value.PadRight(2, m.Groups[2].Value[0]), 16),
- Convert.ToInt32(m.Groups[3].Value.PadRight(2, m.Groups[3].Value[0]), 16));
+ if (String.IsNullOrWhiteSpace(m.Groups[1].Value))
+ return Color.FromArgb(
+ Convert.ToInt32(m.Groups[2].Value.PadRight(2, m.Groups[2].Value[0]), 16),
+ Convert.ToInt32(m.Groups[3].Value.PadRight(2, m.Groups[3].Value[0]), 16),
+ Convert.ToInt32(m.Groups[4].Value.PadRight(2, m.Groups[4].Value[0]), 16));
+ else
+ return Color.FromArgb(
+ Convert.ToInt32(m.Groups[1].Value.PadRight(2, m.Groups[1].Value[0]), 16),
+ Convert.ToInt32(m.Groups[2].Value.PadRight(2, m.Groups[2].Value[0]), 16),
+ Convert.ToInt32(m.Groups[3].Value.PadRight(2, m.Groups[3].Value[0]), 16),
+ Convert.ToInt32(m.Groups[4].Value.PadRight(2, m.Groups[4].Value[0]), 16));
}
}
}
diff --git a/ClosedXML_Examples/ClosedXML_Examples.csproj b/ClosedXML_Examples/ClosedXML_Examples.csproj
index b125c3f..daae972 100644
--- a/ClosedXML_Examples/ClosedXML_Examples.csproj
+++ b/ClosedXML_Examples/ClosedXML_Examples.csproj
@@ -1,7 +1,7 @@
- net452;net461
+ netcoreapp2.0;net452;net461
@@ -21,25 +21,12 @@
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
diff --git a/ClosedXML_Sandbox/ClosedXML_Sandbox.csproj b/ClosedXML_Sandbox/ClosedXML_Sandbox.csproj
index c94f965..35397d6 100644
--- a/ClosedXML_Sandbox/ClosedXML_Sandbox.csproj
+++ b/ClosedXML_Sandbox/ClosedXML_Sandbox.csproj
@@ -2,7 +2,7 @@
Exe
- net452;net461
+ netcoreapp2.0;net452;net461
diff --git a/ClosedXML_Tests/ClosedXML_Tests.csproj b/ClosedXML_Tests/ClosedXML_Tests.csproj
index a3e08fd..94a6b79 100644
--- a/ClosedXML_Tests/ClosedXML_Tests.csproj
+++ b/ClosedXML_Tests/ClosedXML_Tests.csproj
@@ -1,7 +1,7 @@
- net452;net461
+ netcoreapp2.0;net452;net461
false
@@ -13,7 +13,7 @@
$(DefineConstants);_NETSTANDARD_;_NETSTANDARD1_6_
-
+
$(DefineConstants);_NETSTANDARD_;_NETSTANDARD2_0_
@@ -33,11 +33,17 @@
-
+
-
-
+
+
+
+
+
+
+
+
@@ -45,13 +51,12 @@
-
+
-
diff --git a/ClosedXML_Tests/Examples/ImageHandlingTests.cs b/ClosedXML_Tests/Examples/ImageHandlingTests.cs
index cbbbd94..02a87dd 100644
--- a/ClosedXML_Tests/Examples/ImageHandlingTests.cs
+++ b/ClosedXML_Tests/Examples/ImageHandlingTests.cs
@@ -1,3 +1,4 @@
+#if _NETFRAMEWORK_
using ClosedXML_Examples;
using NUnit.Framework;
@@ -19,3 +20,4 @@
}
}
}
+#endif
\ No newline at end of file
diff --git a/ClosedXML_Tests/Excel/ImageHandling/PictureTests.cs b/ClosedXML_Tests/Excel/ImageHandling/PictureTests.cs
index b0ba0d6..6f544fa 100644
--- a/ClosedXML_Tests/Excel/ImageHandling/PictureTests.cs
+++ b/ClosedXML_Tests/Excel/ImageHandling/PictureTests.cs
@@ -7,6 +7,7 @@
using System.Linq;
using System.Reflection;
+#if _NETFRAMEWORK_
namespace ClosedXML_Tests
{
[TestFixture]
@@ -233,3 +234,4 @@
}
}
}
+#endif
\ No newline at end of file
diff --git a/ClosedXML_Tests/Excel/NetStandard/XLColorTranslatorTests.cs b/ClosedXML_Tests/Excel/NetStandard/XLColorTranslatorTests.cs
new file mode 100644
index 0000000..a90b410
--- /dev/null
+++ b/ClosedXML_Tests/Excel/NetStandard/XLColorTranslatorTests.cs
@@ -0,0 +1,44 @@
+#if _NETSTANDARD_
+
+using ClosedXML.Excel;
+using ClosedXML.NetStandard;
+using NUnit.Framework;
+using System.Linq;
+using System.Drawing;
+
+namespace ClosedXML_Tests.Excel.NetStandard
+{
+ ///
+ /// Summary description for UnitTest1
+ ///
+ [TestFixture]
+ public class XLColorTranslatorTests
+ {
+
+
+ [Test]
+ public void CanResolveFromHtmlColor()
+ {
+ Color color;
+ color = XLColorTranslator.FromHtml("#FF000000");
+ Assert.AreEqual(255, color.A);
+ Assert.AreEqual(0, color.R);
+ Assert.AreEqual(0, color.G);
+ Assert.AreEqual(0, color.B);
+
+ color = XLColorTranslator.FromHtml("#8899AABB");
+ Assert.AreEqual(136, color.A);
+ Assert.AreEqual(153, color.R);
+ Assert.AreEqual(170, color.G);
+ Assert.AreEqual(187, color.B);
+
+ color = XLColorTranslator.FromHtml("#99AABB");
+ Assert.AreEqual(255, color.A);
+ Assert.AreEqual(153, color.R);
+ Assert.AreEqual(170, color.G);
+ Assert.AreEqual(187, color.B);
+ }
+ }
+}
+
+#endif
\ No newline at end of file
diff --git a/ClosedXML_Tests/Excel/Saving/SavingTests.cs b/ClosedXML_Tests/Excel/Saving/SavingTests.cs
index ca2fd98..6505f7f 100644
--- a/ClosedXML_Tests/Excel/Saving/SavingTests.cs
+++ b/ClosedXML_Tests/Excel/Saving/SavingTests.cs
@@ -10,6 +10,17 @@
public class SavingTests
{
[Test]
+ public void CanSaveEmptyFile()
+ {
+ using (var ms = new MemoryStream())
+ using (var wb = new XLWorkbook())
+ {
+ wb.AddWorksheet("Sheet1");
+ wb.SaveAs(ms);
+ }
+ }
+
+ [Test]
public void CanSuccessfullySaveFileMultipleTimes()
{
using (var wb = new XLWorkbook())
diff --git a/ClosedXML_Tests/ExcelDocsComparerTests.cs b/ClosedXML_Tests/ExcelDocsComparerTests.cs
index ac2fa36..13a090f 100644
--- a/ClosedXML_Tests/ExcelDocsComparerTests.cs
+++ b/ClosedXML_Tests/ExcelDocsComparerTests.cs
@@ -17,7 +17,11 @@
new BasicTable().Create(left);
new BasicTable().Create(right);
string message;
+#if _NETFRAMEWORK_
Assert.IsTrue(ExcelDocsComparer.Compare(left, right, TestHelper.IsRunningOnUnix, out message));
+#else
+ Assert.IsTrue(ExcelDocsComparer.Compare(left, right, true, out message));
+#endif
}
finally
{
@@ -43,7 +47,11 @@
new HelloWorld().Create(right);
string message;
+#if _NETFRAMEWORK_
Assert.IsFalse(ExcelDocsComparer.Compare(left, right, TestHelper.IsRunningOnUnix, out message));
+#else
+ Assert.IsFalse(ExcelDocsComparer.Compare(left, right, true, out message));
+#endif
}
finally
{
diff --git a/ClosedXML_Tests/OleDb/OleDbTests.cs b/ClosedXML_Tests/OleDb/OleDbTests.cs
index e502614..a687b35 100644
--- a/ClosedXML_Tests/OleDb/OleDbTests.cs
+++ b/ClosedXML_Tests/OleDb/OleDbTests.cs
@@ -12,7 +12,7 @@
[TestFixture]
public class OleDbTests
{
-#if !APPVEYOR
+#if !APPVEYOR && _NETFRAMEWORK_
[Test]
public void TestOleDbValues()
{
diff --git a/ClosedXML_Tests/TestHelper.cs b/ClosedXML_Tests/TestHelper.cs
index bf85115..7425752 100644
--- a/ClosedXML_Tests/TestHelper.cs
+++ b/ClosedXML_Tests/TestHelper.cs
@@ -90,7 +90,11 @@
using (var streamActual = File.OpenRead(filePath2))
{
string message;
+#if _NETFRAMEWORK_
success = ExcelDocsComparer.Compare(streamActual, streamExpected, TestHelper.IsRunningOnUnix, out message);
+#else
+ success = ExcelDocsComparer.Compare(streamActual, streamExpected, true, out message);
+#endif
var formattedMessage =
String.Format(
"Actual file '{0}' is different than the expected file '{1}'. The difference is: '{2}'",
diff --git a/ClosedXML_Tests/Utils/ExcelDocsComparer.cs b/ClosedXML_Tests/Utils/ExcelDocsComparer.cs
index 2ad4ab2..373ba62 100644
--- a/ClosedXML_Tests/Utils/ExcelDocsComparer.cs
+++ b/ClosedXML_Tests/Utils/ExcelDocsComparer.cs
@@ -19,9 +19,9 @@
public static bool Compare(Stream left, Stream right, bool stripColumnWidths, out string message)
{
- using (Package leftPackage = Package.Open(left))
+ using (Package leftPackage = Package.Open(left, FileMode.Open, FileAccess.Read))
{
- using (Package rightPackage = Package.Open(right))
+ using (Package rightPackage = Package.Open(right, FileMode.Open, FileAccess.Read))
{
return PackageHelper.Compare(leftPackage, rightPackage, false, ExcludeMethod, stripColumnWidths, out message);
}
diff --git a/nuget.config b/nuget.config
new file mode 100644
index 0000000..7a7d936
--- /dev/null
+++ b/nuget.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file