diff --git a/src/EPPlus/FormulaParsing/Excel/Functions/Text/Text.cs b/src/EPPlus/FormulaParsing/Excel/Functions/Text/Text.cs index f6b801f46..24fb8ea65 100644 --- a/src/EPPlus/FormulaParsing/Excel/Functions/Text/Text.cs +++ b/src/EPPlus/FormulaParsing/Excel/Functions/Text/Text.cs @@ -47,9 +47,9 @@ public class Text : ExcelFunction public override CompileResult Execute(IList arguments, ParsingContext context) { var value = arguments[0].ValueFirst; - var format = ArgToString(arguments, 1); + var format = ArgToString(arguments, 1) ?? ""; var invariantFormat = GetInvariantFormat(format); - + var result = context.ExcelDataProvider.GetFormat(value, invariantFormat, out bool isValidFormat); if(!isValidFormat) { @@ -61,6 +61,10 @@ public override CompileResult Execute(IList arguments, Parsing private static string GetInvariantFormat(string format) { + if (string.IsNullOrEmpty(format)) + { + return format; + } var nds = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator; var ds = nds[0]; var ngs = CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator; diff --git a/src/EPPlus/FormulaParsing/Excel/Functions/Text/Unichar.cs b/src/EPPlus/FormulaParsing/Excel/Functions/Text/Unichar.cs index 2b6c2c83d..a45452365 100644 --- a/src/EPPlus/FormulaParsing/Excel/Functions/Text/Unichar.cs +++ b/src/EPPlus/FormulaParsing/Excel/Functions/Text/Unichar.cs @@ -35,7 +35,7 @@ public override CompileResult Execute(IList arguments, Parsing && short.TryParse(ArgToString(arguments, 0), out short arg)) { - return CreateResult(char.ConvertFromUtf32(arg), DataType.Integer); + return CreateResult(char.ConvertFromUtf32(arg).ToString(), DataType.String); } return CreateResult(ExcelErrorValue.Values.Value, DataType.ExcelError); } diff --git a/src/EPPlusTest/FormulaParsing/Excel/Functions/TextFunctionsTests.cs b/src/EPPlusTest/FormulaParsing/Excel/Functions/TextFunctionsTests.cs index afce34a9d..da56a51d2 100644 --- a/src/EPPlusTest/FormulaParsing/Excel/Functions/TextFunctionsTests.cs +++ b/src/EPPlusTest/FormulaParsing/Excel/Functions/TextFunctionsTests.cs @@ -307,6 +307,22 @@ public void UnicharShouldReturnCorrectChar() Assert.AreEqual("a", result.Result); } + [TestMethod] + public void UnicharShouldReturnCorrectResultNumeric() + { + using (var package = new ExcelPackage()) + { + var sheet = package.Workbook.Worksheets.Add("test"); + sheet.Cells["A1"].Value = 178; + + sheet.Cells["B2"].Formula = "UNICHAR(A1)"; + sheet.Calculate(); + + var result = sheet.Cells["B2"].Value; + Assert.AreEqual("²", result); + } + } + [TestMethod] public void NumberValueWithEmptyStringShouldReturn0() { diff --git a/src/EPPlusTest/Issues/FormulaCalculationIssues.cs b/src/EPPlusTest/Issues/FormulaCalculationIssues.cs index e58724921..9d1f61eb8 100644 --- a/src/EPPlusTest/Issues/FormulaCalculationIssues.cs +++ b/src/EPPlusTest/Issues/FormulaCalculationIssues.cs @@ -1347,6 +1347,15 @@ public void s968() Assert.AreEqual("One or more errors occurred during the valuation run", ws.Cells["E40"].Value); Assert.IsNull(ws.Cells["D41"].Value); } + + + [TestMethod] + public void s973() + { + using var package = OpenTemplatePackage("s973.xlsx"); + package.Workbook.Calculate(); + Assert.AreEqual("12,35²", package.Workbook.Worksheets[0].Cells["A3"].Value); + } } }