Skip to content

Commit 73cfad4

Browse files
authored
Fixed Exp not returning the correct error value. (#2231)
1 parent 5cebefe commit 73cfad4

2 files changed

Lines changed: 31 additions & 4 deletions

File tree

src/EPPlus/FormulaParsing/Excel/Operators/Operator.cs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,12 @@ Date Author Change
1010
*************************************************************************************************
1111
01/27/2020 EPPlus Software AB Initial release EPPlus 5
1212
*************************************************************************************************/
13-
using System;
1413
using OfficeOpenXml.FormulaParsing.FormulaExpressions;
15-
using OfficeOpenXml.FormulaParsing.Exceptions;
1614
using OfficeOpenXml.FormulaParsing.LexicalAnalysis;
17-
using System.Diagnostics;
1815
using OfficeOpenXml.FormulaParsing.Ranges;
19-
using OfficeOpenXml.FormulaParsing.Excel.Functions.MathFunctions;
2016
using OfficeOpenXml.Utils.TypeConversion;
17+
using System;
18+
using System.Diagnostics;
2119

2220
namespace OfficeOpenXml.FormulaParsing.Excel.Operators
2321
{
@@ -288,6 +286,18 @@ public static IOperator Exp
288286
var res = Math.Pow(l.ResultNumeric, r.ResultNumeric);
289287
return CreateCompileResult(l.ResultType, r.ResultType, res, DataType.Decimal);
290288
}
289+
if (l.DataType == DataType.String || r.DataType == DataType.String)
290+
{
291+
return CompileResult.GetErrorResult(eErrorType.Value);
292+
}
293+
if (l.Result is ExcelErrorValue)
294+
{
295+
return new CompileResult(l.Result, DataType.ExcelError);
296+
}
297+
else if (r.Result is ExcelErrorValue)
298+
{
299+
return new CompileResult(r.Result, DataType.ExcelError);
300+
}
291301
return CompileResult.ZeroDecimal;
292302
});
293303
}

src/EPPlusTest/Issues/LegacyTests/Issues.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6315,5 +6315,22 @@ public void ReadCustomXml2()
63156315
Assert.AreEqual(12, p.Workbook.CustomXmlDocuments[2].SchemasReferences.Count);
63166316
SaveAndCleanup(p);
63176317
}
6318+
[TestMethod]
6319+
public void s985()
6320+
{
6321+
using var pkg = new ExcelPackage();
6322+
var ws = pkg.Workbook.Worksheets.Add("Pow");
6323+
ws.Cells["A1"].Value = "x";
6324+
ws.Cells["B1"].Formula = "A1^2";
6325+
ws.Cells["C1"].Formula = "2^A1";
6326+
ws.Cells["D1"].Formula = "x^2";
6327+
ws.Cells["E1"].Formula = "2^x";
6328+
ws.Calculate();
6329+
Assert.AreEqual(ExcelErrorValue.Create(eErrorType.Value), ws.Cells["B1"].Value);
6330+
Assert.AreEqual(ExcelErrorValue.Create(eErrorType.Value), ws.Cells["C1"].Value);
6331+
Assert.AreEqual(ExcelErrorValue.Create(eErrorType.Name), ws.Cells["D1"].Value);
6332+
Assert.AreEqual(ExcelErrorValue.Create(eErrorType.Name), ws.Cells["E1"].Value);
6333+
}
63186334
}
63196335
}
6336+

0 commit comments

Comments
 (0)