diff --git a/EPPlus/FormulaParsing/ExcelUtilities/ValueMatcher.cs b/EPPlus/FormulaParsing/ExcelUtilities/ValueMatcher.cs index c4a5e40a..634177cc 100644 --- a/EPPlus/FormulaParsing/ExcelUtilities/ValueMatcher.cs +++ b/EPPlus/FormulaParsing/ExcelUtilities/ValueMatcher.cs @@ -29,9 +29,6 @@ * Mats Alm Added 2013-03-01 (Prior file history on https://github.com/swmal/ExcelFormulaParser) *******************************************************************************/ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; namespace OfficeOpenXml.FormulaParsing.ExcelUtilities { @@ -52,7 +49,7 @@ public virtual int IsMatch(object o1, object o2) { return CompareStringToString(o1.ToString().ToLower(), o2.ToString().ToLower()); } - else if( o1.GetType() == typeof(string)) + else if (o1.GetType() == typeof(string)) { return CompareStringToObject(o1.ToString(), o2); } @@ -60,6 +57,10 @@ public virtual int IsMatch(object o1, object o2) { return CompareObjectToString(o1, o2.ToString()); } + else if (o1.GetType() == typeof(DateTime)) + { + return CompareDatetimeToDouble(o1, o2.ToString()); + } return Convert.ToDouble(o1).CompareTo(Convert.ToDouble(o2)); } @@ -116,5 +117,15 @@ protected virtual int CompareObjectToString(object o1, string o2) } return IncompatibleOperands; } + + protected virtual int CompareDatetimeToDouble(object o1, string o2) + { + double dt1; + if (double.TryParse(o2, out dt1)) + { + return DateTime.FromOADate(double.Parse(o2)).CompareTo(o1); + } + return IncompatibleOperands; + } } } diff --git a/EPPlusTest/FormulaParsing/ExcelUtilities/ValueMatcherTests.cs b/EPPlusTest/FormulaParsing/ExcelUtilities/ValueMatcherTests.cs index 3c67dd06..cdaf38af 100644 --- a/EPPlusTest/FormulaParsing/ExcelUtilities/ValueMatcherTests.cs +++ b/EPPlusTest/FormulaParsing/ExcelUtilities/ValueMatcherTests.cs @@ -103,5 +103,14 @@ public void ShouldReturnMînus2WhenTypesDifferAndStringConversionToDoubleFails() var result = _matcher.IsMatch(o1, o2); Assert.AreEqual(-2, result); } + + [TestMethod] + public void ShouldReturnMinus1WhenTypesAreDateTimeAndDouble() + { + object o1 = Convert.ToDateTime("18/01/2024"); + object o2 = 41711; + var result = _matcher.IsMatch(o1, o2); + Assert.AreEqual(-1, result); + } } }