diff --git a/ClosedXML/Excel/CalcEngine/Functions/MathTrig.cs b/ClosedXML/Excel/CalcEngine/Functions/MathTrig.cs index b042a5e..d4fc266 100644 --- a/ClosedXML/Excel/CalcEngine/Functions/MathTrig.cs +++ b/ClosedXML/Excel/CalcEngine/Functions/MathTrig.cs @@ -215,7 +215,7 @@ private static object Int(List p) { - return (int)((double)p[0]); + return Math.Floor(p[0]); } private static object Ln(List p) diff --git a/ClosedXML/Excel/XLWorkbook.cs b/ClosedXML/Excel/XLWorkbook.cs index 1177678..5f73324 100644 --- a/ClosedXML/Excel/XLWorkbook.cs +++ b/ClosedXML/Excel/XLWorkbook.cs @@ -401,14 +401,7 @@ public Boolean TryGetWorksheet(String name, out IXLWorksheet worksheet) { - if (Worksheets.Any(w => string.Equals(w.Name, XLWorksheets.TrimSheetName(name), StringComparison.OrdinalIgnoreCase))) - { - worksheet = Worksheet(name); - return true; - } - - worksheet = null; - return false; + return Worksheets.TryGetWorksheet(name, out worksheet); } public IXLRange RangeFromFullAddress(String rangeAddress, out IXLWorksheet ws) @@ -523,6 +516,7 @@ _loadSource = XLLoadSource.File; _originalFile = file; + _originalStream = null; } private static SpreadsheetDocumentType GetSpreadsheetDocumentType(string filePath) @@ -624,6 +618,7 @@ _loadSource = XLLoadSource.Stream; _originalStream = stream; + _originalFile = null; } internal static void CopyStream(Stream input, Stream output) @@ -990,5 +985,10 @@ { Protect(false, false, workbookPassword); } + + public override string ToString() + { + return _originalFile ?? String.Format("XLWorkbook({0})", _originalStream.ToString()); + } } } diff --git a/ClosedXML/Excel/XLWorksheet.cs b/ClosedXML/Excel/XLWorksheet.cs index 6b5348a..7e37bba 100644 --- a/ClosedXML/Excel/XLWorksheet.cs +++ b/ClosedXML/Excel/XLWorksheet.cs @@ -651,7 +651,8 @@ } if (AutoFilter.Enabled) - targetSheet.Range(AutoFilter.Range.RangeAddress).SetAutoFilter(); + using (var range = targetSheet.Range(AutoFilter.Range.RangeAddress.FirstAddress.RowNumber, AutoFilter.Range.RangeAddress.FirstAddress.ColumnNumber, AutoFilter.Range.RangeAddress.LastAddress.RowNumber, AutoFilter.Range.RangeAddress.LastAddress.ColumnNumber)) + range.SetAutoFilter(); return targetSheet; } diff --git a/ClosedXML/Excel/XLWorksheets.cs b/ClosedXML/Excel/XLWorksheets.cs index 9061e1d..af69de6 100644 --- a/ClosedXML/Excel/XLWorksheets.cs +++ b/ClosedXML/Excel/XLWorksheets.cs @@ -47,7 +47,7 @@ public bool TryGetWorksheet(string sheetName, out IXLWorksheet worksheet) { XLWorksheet w; - if (_worksheets.TryGetValue(sheetName, out w)) + if (_worksheets.TryGetValue(TrimSheetName(sheetName).ToLowerInvariant(), out w)) { worksheet = w; return true; @@ -70,7 +70,7 @@ XLWorksheet w; - if (_worksheets.TryGetValue(sheetName, out w)) + if (_worksheets.TryGetValue(sheetName.ToLowerInvariant(), out w)) return w; var wss = _worksheets.Where(ws => string.Equals(ws.Key, sheetName, StringComparison.OrdinalIgnoreCase)); @@ -118,12 +118,12 @@ if (_worksheets.Any(ws => ws.Key.Equals(sheetName, StringComparison.OrdinalIgnoreCase))) throw new ArgumentException(String.Format("A worksheet with the same name ({0}) has already been added.", sheetName), nameof(sheetName)); - _worksheets.Add(sheetName, sheet); + _worksheets.Add(sheetName.ToLowerInvariant(), sheet); } public void Delete(String sheetName) { - Delete(_worksheets[sheetName].Position); + Delete(_worksheets[sheetName.ToLowerInvariant()].Position); } public void Delete(Int32 position) @@ -178,14 +178,14 @@ public void Rename(String oldSheetName, String newSheetName) { - if (String.IsNullOrWhiteSpace(oldSheetName) || !_worksheets.ContainsKey(oldSheetName)) return; + if (String.IsNullOrWhiteSpace(oldSheetName) || !_worksheets.ContainsKey(oldSheetName.ToLowerInvariant())) return; if (!oldSheetName.Equals(newSheetName, StringComparison.OrdinalIgnoreCase) && _worksheets.Any(ws1 => ws1.Key.Equals(newSheetName, StringComparison.OrdinalIgnoreCase))) throw new ArgumentException(String.Format("A worksheet with the same name ({0}) has already been added.", newSheetName), nameof(newSheetName)); - var ws = _worksheets[oldSheetName]; - _worksheets.Remove(oldSheetName); + var ws = _worksheets[oldSheetName.ToLowerInvariant()]; + _worksheets.Remove(oldSheetName.ToLowerInvariant()); Add(newSheetName, ws); } } diff --git a/ClosedXML/Properties/AssemblyVersionInfo.cs b/ClosedXML/Properties/AssemblyVersionInfo.cs index 57466c5..ec9596d 100644 --- a/ClosedXML/Properties/AssemblyVersionInfo.cs +++ b/ClosedXML/Properties/AssemblyVersionInfo.cs @@ -7,6 +7,6 @@ // Build Number // Revision // -[assembly: AssemblyVersion("0.89.0.0")] -[assembly: AssemblyFileVersion("0.89.0.0")] -[assembly: AssemblyInformationalVersion("0.89.0-beta1")] +[assembly: AssemblyVersion("0.90.0.0")] +[assembly: AssemblyFileVersion("0.90.0.0")] +[assembly: AssemblyInformationalVersion("0.90.0-beta2")] diff --git a/ClosedXML_Tests/Excel/AutoFilters/AutoFilterTests.cs b/ClosedXML_Tests/Excel/AutoFilters/AutoFilterTests.cs index da8bde2..9a4356a 100644 --- a/ClosedXML_Tests/Excel/AutoFilters/AutoFilterTests.cs +++ b/ClosedXML_Tests/Excel/AutoFilters/AutoFilterTests.cs @@ -1,8 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; using ClosedXML.Excel; using NUnit.Framework; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; namespace ClosedXML_Tests { @@ -94,5 +95,35 @@ Assert.That(!ws.AutoFilter.Enabled); } } + + [Test] + public void CanCopyAutoFilterToNewSheetOnNewWorkbook() + { + using (var ms1 = new MemoryStream()) + using (var ms2 = new MemoryStream()) + { + using (var wb1 = new XLWorkbook()) + using (var wb2 = new XLWorkbook()) + { + var ws = wb1.Worksheets.Add("AutoFilter"); + ws.Cell("A1").Value = "Names"; + ws.Cell("A2").Value = "John"; + ws.Cell("A3").Value = "Hank"; + ws.Cell("A4").Value = "Dagny"; + + ws.RangeUsed().SetAutoFilter(); + + wb1.SaveAs(ms1); + + ws.CopyTo(wb2, ws.Name); + wb2.SaveAs(ms2); + } + + using (var wb2 = new XLWorkbook(ms2)) + { + Assert.IsTrue(wb2.Worksheets.First().AutoFilter.Enabled); + } + } + } } } diff --git a/ClosedXML_Tests/Excel/CalcEngine/MathTrigTests.cs b/ClosedXML_Tests/Excel/CalcEngine/MathTrigTests.cs index be8bb17..dd2eeef 100644 --- a/ClosedXML_Tests/Excel/CalcEngine/MathTrigTests.cs +++ b/ClosedXML_Tests/Excel/CalcEngine/MathTrigTests.cs @@ -1,5 +1,4 @@ using ClosedXML.Excel; -using ClosedXML.Excel.CalcEngine; using ClosedXML.Excel.CalcEngine.Exceptions; using NUnit.Framework; using System; @@ -12,7 +11,7 @@ public class MathTrigTests { private readonly double tolerance = 1e-10; - + [TestCase(1, 0.642092616)] [TestCase(2, -0.457657554)] [TestCase(3, -7.015252551)] @@ -24,7 +23,7 @@ [TestCase(9, -2.210845411)] [TestCase(10, 1.542351045)] [TestCase(11, -0.004425741)] - [TestCase(Math.PI*0.5, 0)] + [TestCase(Math.PI * 0.5, 0)] [TestCase(45, 0.617369624)] [TestCase(-2, 0.457657554)] [TestCase(-3, 7.015252551)] @@ -217,5 +216,14 @@ { Assert.Throws(() => XLWorkbook.EvaluateExpr("CSCH(0)")); } + + [TestCase(8.9, 8)] + [TestCase(-8.9, -9)] + public void Int(double input, double expected) + { + var actual = XLWorkbook.EvaluateExpr(string.Format(@"INT({0})", input.ToString(CultureInfo.InvariantCulture))); + Assert.AreEqual(expected, actual); + + } } } diff --git a/ClosedXML_Tests/Excel/Worksheets/XLWorksheetTests.cs b/ClosedXML_Tests/Excel/Worksheets/XLWorksheetTests.cs index 76f612e..33fafed 100644 --- a/ClosedXML_Tests/Excel/Worksheets/XLWorksheetTests.cs +++ b/ClosedXML_Tests/Excel/Worksheets/XLWorksheetTests.cs @@ -161,6 +161,27 @@ } [Test] + public void TryGetWorksheet() + { + using (var wb = new XLWorkbook()) + { + var ws1 = wb.AddWorksheet("Sheet1"); + var ws2 = wb.AddWorksheet("Sheet2"); + + IXLWorksheet ws; + Assert.IsTrue(wb.Worksheets.TryGetWorksheet("Sheet1", out ws)); + Assert.IsTrue(wb.Worksheets.TryGetWorksheet("sheet1", out ws)); + Assert.IsTrue(wb.Worksheets.TryGetWorksheet("sHEeT1", out ws)); + Assert.IsFalse(wb.Worksheets.TryGetWorksheet("Sheeeet2", out ws)); + + Assert.IsTrue(wb.TryGetWorksheet("Sheet1", out ws)); + Assert.IsTrue(wb.TryGetWorksheet("sheet1", out ws)); + Assert.IsTrue(wb.TryGetWorksheet("sHEeT1", out ws)); + Assert.IsFalse(wb.TryGetWorksheet("Sheeeet2", out ws)); + } + } + + [Test] public void HideWorksheet() { using (var ms = new MemoryStream())