diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs index 20402ad..0336aff 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook.cs @@ -3,6 +3,7 @@ using System.IO; using System.Security.AccessControl; using ClosedXML.Excel.CalcEngine; +using DocumentFormat.OpenXml; namespace ClosedXML.Excel { @@ -408,9 +409,11 @@ throw new Exception("This is a new file, please use one of the SaveAs methods."); if (_loadSource == XLLoadSource.Stream) - CreatePackage(_originalStream, false); + { + CreatePackage(_originalStream, false, _spreadsheetDocumentType); + } else - CreatePackage(_originalFile); + CreatePackage(_originalFile, _spreadsheetDocumentType); } /// @@ -424,14 +427,14 @@ if (File.Exists(file)) File.Delete(file); - CreatePackage(file); + CreatePackage(file, GetSpreadsheetDocumentType(file)); } else if (_loadSource == XLLoadSource.File) { if (String.Compare(_originalFile.Trim(), file.Trim(), true) != 0) File.Copy(_originalFile, file, true); - CreatePackage(file); + CreatePackage(file, GetSpreadsheetDocumentType(file)); } else if (_loadSource == XLLoadSource.Stream) { @@ -441,12 +444,24 @@ { CopyStream(_originalStream, fileStream); //fileStream.Position = 0; - CreatePackage(fileStream, false); + CreatePackage(fileStream, false, _spreadsheetDocumentType); fileStream.Close(); } } } + private static SpreadsheetDocumentType GetSpreadsheetDocumentType(string filePath) + { + var extension = Path.GetExtension(filePath); + + if (extension == null) throw new Exception("Empty extension is not supported."); + + if (extension.ToLowerInvariant().Equals(".xlsm")) return SpreadsheetDocumentType.MacroEnabledWorkbook; + + if (extension.ToLowerInvariant().Equals(".xlsx")) return SpreadsheetDocumentType.Workbook; + + throw new Exception(String.Format("Extension '{0}' is not supported. Supported extensions are '.xlsx' and '.xslm'.", extension)); + } /// /// Saves the current workbook to a stream. /// @@ -461,13 +476,13 @@ if (stream.CanRead && stream.CanSeek && stream.CanWrite) { // all is fine the package can be created in a direct way - CreatePackage(stream, true); + CreatePackage(stream, true, _spreadsheetDocumentType); } else { // the harder way MemoryStream ms = new MemoryStream(); - CreatePackage(ms, true); + CreatePackage(ms, true, _spreadsheetDocumentType); // not really nessesary, because I changed CopyStream too. // but for better understanding and if somebody in the future // provide an changed version of CopyStream @@ -482,7 +497,7 @@ CopyStream(fileStream, stream); fileStream.Close(); } - CreatePackage(stream, false); + CreatePackage(stream, false, _spreadsheetDocumentType); } else if (_loadSource == XLLoadSource.Stream) { @@ -490,7 +505,7 @@ if (_originalStream != stream) CopyStream(_originalStream, stream); - CreatePackage(stream, false); + CreatePackage(stream, false, _spreadsheetDocumentType); } } @@ -623,6 +638,7 @@ { _loadSource = XLLoadSource.File; _originalFile = file; + _spreadsheetDocumentType = GetSpreadsheetDocumentType(_originalFile); Load(file); } @@ -749,6 +765,8 @@ } private static XLCalcEngine _calcEngineExpr; + private SpreadsheetDocumentType _spreadsheetDocumentType; + private static XLCalcEngine CalcEngineExpr { get { return _calcEngineExpr ?? (_calcEngineExpr = new XLCalcEngine()); } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs index a28026f..d8a25cb 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs @@ -79,12 +79,12 @@ } } - private void CreatePackage(String filePath) + private void CreatePackage(String filePath, SpreadsheetDocumentType spreadsheetDocumentType) { PathHelper.CreateDirectory(Path.GetDirectoryName(filePath)); var package = File.Exists(filePath) ? SpreadsheetDocument.Open(filePath, true) - : SpreadsheetDocument.Create(filePath, SpreadsheetDocumentType.Workbook); + : SpreadsheetDocument.Create(filePath, spreadsheetDocumentType); using (package) { @@ -93,10 +93,10 @@ } } - private void CreatePackage(Stream stream, Boolean newStream) + private void CreatePackage(Stream stream, bool newStream, SpreadsheetDocumentType spreadsheetDocumentType) { var package = newStream - ? SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook) + ? SpreadsheetDocument.Create(stream, spreadsheetDocumentType) : SpreadsheetDocument.Open(stream, true); using (package) diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Delete/DeleteFewWorksheets.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Delete/DeleteFewWorksheets.cs index f585a17..8d879fc 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Delete/DeleteFewWorksheets.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Delete/DeleteFewWorksheets.cs @@ -7,7 +7,7 @@ { public void Create(string filePath) { - string tempFile = ExampleHelper.GetTempFilePath(); + string tempFile = ExampleHelper.GetTempFilePath(filePath); try { //Note: Prepare diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/ExampleHelper.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/ExampleHelper.cs index 102d450..188a5b1 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/ExampleHelper.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/ExampleHelper.cs @@ -8,5 +8,12 @@ { return Path.GetTempFileName(); } + + public static string GetTempFilePath(string filePath) + { + var extension = Path.GetExtension(filePath); + var tempFilePath = GetTempFilePath(); + return Path.ChangeExtension(tempFilePath, extension); + } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Loading/ChangingBasicTable.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Loading/ChangingBasicTable.cs index 32090ab..10d122e 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Loading/ChangingBasicTable.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Loading/ChangingBasicTable.cs @@ -8,7 +8,7 @@ { public void Create(string filePath) { - string tempFile = ExampleHelper.GetTempFilePath(); + string tempFile = ExampleHelper.GetTempFilePath(filePath); try { new BasicTable().Create(tempFile); diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/CopyingWorksheets.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/CopyingWorksheets.cs index 1790094..2c86867 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/CopyingWorksheets.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/CopyingWorksheets.cs @@ -8,8 +8,8 @@ { public void Create(string filePath) { - string tempFile1 = ExampleHelper.GetTempFilePath(); - string tempFile2 = ExampleHelper.GetTempFilePath(); + string tempFile1 = ExampleHelper.GetTempFilePath(filePath); + string tempFile2 = ExampleHelper.GetTempFilePath(filePath); try { new UsingTables().Create(tempFile1); diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/LambdaExpressions.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/LambdaExpressions.cs index 282d90b..325cf58 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/LambdaExpressions.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/LambdaExpressions.cs @@ -9,7 +9,7 @@ public void Create(string filePath) { - string tempFile = ExampleHelper.GetTempFilePath(); + string tempFile = ExampleHelper.GetTempFilePath(filePath); try { new BasicTable().Create(tempFile); diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/MergeMoves.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/MergeMoves.cs index d8b341e..d2d5f46 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/MergeMoves.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Misc/MergeMoves.cs @@ -9,7 +9,7 @@ public void Create(string filePath) { - string tempFile = ExampleHelper.GetTempFilePath(); + string tempFile = ExampleHelper.GetTempFilePath(filePath); try { new MergeCells().Create(tempFile); diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/CopyingRanges.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/CopyingRanges.cs index 8569d7c..1550592 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/CopyingRanges.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/CopyingRanges.cs @@ -7,7 +7,7 @@ { public void Create(string filePath) { - string tempFile = ExampleHelper.GetTempFilePath(); + var tempFile = ExampleHelper.GetTempFilePath(filePath); try { new BasicTable().Create(tempFile); diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/ShiftingRanges.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/ShiftingRanges.cs index 58fa3be..b01bdb9 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/ShiftingRanges.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/ShiftingRanges.cs @@ -7,7 +7,7 @@ { public void Create(string filePath) { - string tempFile = ExampleHelper.GetTempFilePath(); + string tempFile = ExampleHelper.GetTempFilePath(filePath); try { new BasicTable().Create(tempFile); diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/TransposeRanges.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/TransposeRanges.cs index d1d3a08..3d1af2d 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/TransposeRanges.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/TransposeRanges.cs @@ -8,7 +8,7 @@ { public void Create(string filePath) { - string tempFile = ExampleHelper.GetTempFilePath(); + string tempFile = ExampleHelper.GetTempFilePath(filePath); try { new BasicTable().Create(tempFile); diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/TransposeRangesPlus.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/TransposeRangesPlus.cs index f3b37c8..9ced0c0 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/TransposeRangesPlus.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/TransposeRangesPlus.cs @@ -7,7 +7,7 @@ { public void Create(string filePath) { - string tempFile = ExampleHelper.GetTempFilePath(); + string tempFile = ExampleHelper.GetTempFilePath(filePath); try { new BasicTable().Create(tempFile); diff --git a/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/UsingTables.cs b/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/UsingTables.cs index a29cf9b..045dca9 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/UsingTables.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Examples/Ranges/UsingTables.cs @@ -13,7 +13,7 @@ // Public public void Create(String filePath) { - string tempFile = ExampleHelper.GetTempFilePath(); + string tempFile = ExampleHelper.GetTempFilePath(filePath); try { new BasicTable().Create(tempFile); diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/CalcEngine/FunctionsTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/CalcEngine/FunctionsTests.cs index 2fe1e03..4444276 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/CalcEngine/FunctionsTests.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/CalcEngine/FunctionsTests.cs @@ -3,6 +3,7 @@ using System.Text; using System.Collections.Generic; using System.Linq; +using System.Threading; using ClosedXML.Excel; using Microsoft.VisualStudio.TestTools.UnitTesting; @@ -440,13 +441,11 @@ [TestMethod] public void Dollar() { - Object actual; - - actual = XLWorkbook.EvaluateExpr("Dollar(12345.123)"); - Assert.AreEqual("$12,345.12", actual); + var actual = XLWorkbook.EvaluateExpr("Dollar(12345.123)"); + Assert.AreEqual(TestHelper.CurrencySymbol + " 12,345.12", actual); actual = XLWorkbook.EvaluateExpr("Dollar(12345.123, 1)"); - Assert.AreEqual("$12,345.1", actual); + Assert.AreEqual(TestHelper.CurrencySymbol + " 12,345.1", actual); } [TestMethod] diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Columns/ColumnsTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Columns/ColumnsTests.cs index 2d3e5c1..bd4e237 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Columns/ColumnsTests.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Columns/ColumnsTests.cs @@ -1,4 +1,5 @@ using ClosedXML.Excel; +using DocumentFormat.OpenXml.Drawing; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Linq; @@ -113,7 +114,8 @@ var column3 = ws.Column(3); var columnIns = ws.Column(2).InsertColumnsBefore(1).First(); - wb.SaveAs(@"D:\Excel Files\ForTesting\Sandbox.xlsx"); + var outputPath = System.IO.Path.Combine(TestHelper.TestsOutputDirectory,@"ForTesting\Sandbox.xlsx"); + wb.SaveAs(outputPath); Assert.AreEqual(XLColor.Red, ws.Column(1).Cell(1).Style.Fill.BackgroundColor); Assert.AreEqual(XLColor.Red, ws.Column(1).Cell(2).Style.Fill.BackgroundColor); diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/ExcelDocsComparerTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/ExcelDocsComparerTests.cs index adc2a92..b4b9c3d 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/ExcelDocsComparerTests.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/ExcelDocsComparerTests.cs @@ -10,8 +10,8 @@ [TestMethod] public void CheckEqual() { - string left = ExampleHelper.GetTempFilePath(); - string right = ExampleHelper.GetTempFilePath(); + string left = ExampleHelper.GetTempFilePath("left.xlsx"); + string right = ExampleHelper.GetTempFilePath("right.xlsx"); try { new BasicTable().Create(left); @@ -35,8 +35,8 @@ [TestMethod] public void CheckNonEqual() { - string left = ExampleHelper.GetTempFilePath(); - string right = ExampleHelper.GetTempFilePath(); + string left = ExampleHelper.GetTempFilePath("left.xlsx"); + string right = ExampleHelper.GetTempFilePath("right.xlsx"); try { new BasicTable().Create(left); diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/TestHelper.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/TestHelper.cs index 08806da..386ccd7 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/TestHelper.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/TestHelper.cs @@ -1,14 +1,28 @@ +using System; using System.IO; +using System.Threading; using ClosedXML.Excel; using ClosedXML_Examples; +using DocumentFormat.OpenXml.Drawing; using Microsoft.VisualStudio.TestTools.UnitTesting; +using Path = System.IO.Path; namespace ClosedXML_Tests { internal static class TestHelper { + public static string CurrencySymbol + { + get { return Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol; } + } + //Note: Run example tests parameters - public const string TestsOutputDirectory = @"D:\Excel Files\Tests\"; + public static string TestsOutputDirectory + { + get { return Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); } + + } + public const string ActualTestResultPostFix = ""; public static readonly string TestsExampleOutputDirectory = Path.Combine(TestsOutputDirectory, "Examples"); @@ -55,7 +69,12 @@ { string message; success = ExcelDocsComparer.Compare(streamActual, streamExpected, out message); - Assert.IsTrue(success, message); + var formattedMessage = + String.Format( + "Actual file '{0}' is different than the expected file '{1}'. The difference is: '{2}'", + filePath2, resourcePath, message); + + Assert.IsTrue(success, formattedMessage); } } }