Skip to content

Commit f5cfb0f

Browse files
authored
Unichar and text bug (#2190)
* Fixed bugs in funktions TEXT and UNICHAR * Removed unused code
1 parent 47e5a3e commit f5cfb0f

File tree

4 files changed

+32
-3
lines changed

4 files changed

+32
-3
lines changed

src/EPPlus/FormulaParsing/Excel/Functions/Text/Text.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ public class Text : ExcelFunction
4747
public override CompileResult Execute(IList<FunctionArgument> arguments, ParsingContext context)
4848
{
4949
var value = arguments[0].ValueFirst;
50-
var format = ArgToString(arguments, 1);
50+
var format = ArgToString(arguments, 1) ?? "";
5151
var invariantFormat = GetInvariantFormat(format);
52-
52+
5353
var result = context.ExcelDataProvider.GetFormat(value, invariantFormat, out bool isValidFormat);
5454
if(!isValidFormat)
5555
{
@@ -61,6 +61,10 @@ public override CompileResult Execute(IList<FunctionArgument> arguments, Parsing
6161

6262
private static string GetInvariantFormat(string format)
6363
{
64+
if (string.IsNullOrEmpty(format))
65+
{
66+
return format;
67+
}
6468
var nds = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
6569
var ds = nds[0];
6670
var ngs = CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator;

src/EPPlus/FormulaParsing/Excel/Functions/Text/Unichar.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public override CompileResult Execute(IList<FunctionArgument> arguments, Parsing
3535
&&
3636
short.TryParse(ArgToString(arguments, 0), out short arg))
3737
{
38-
return CreateResult(char.ConvertFromUtf32(arg), DataType.Integer);
38+
return CreateResult(char.ConvertFromUtf32(arg).ToString(), DataType.String);
3939
}
4040
return CreateResult(ExcelErrorValue.Values.Value, DataType.ExcelError);
4141
}

src/EPPlusTest/FormulaParsing/Excel/Functions/TextFunctionsTests.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,22 @@ public void UnicharShouldReturnCorrectChar()
307307
Assert.AreEqual("a", result.Result);
308308
}
309309

310+
[TestMethod]
311+
public void UnicharShouldReturnCorrectResultNumeric()
312+
{
313+
using (var package = new ExcelPackage())
314+
{
315+
var sheet = package.Workbook.Worksheets.Add("test");
316+
sheet.Cells["A1"].Value = 178;
317+
318+
sheet.Cells["B2"].Formula = "UNICHAR(A1)";
319+
sheet.Calculate();
320+
321+
var result = sheet.Cells["B2"].Value;
322+
Assert.AreEqual("²", result);
323+
}
324+
}
325+
310326
[TestMethod]
311327
public void NumberValueWithEmptyStringShouldReturn0()
312328
{

src/EPPlusTest/Issues/FormulaCalculationIssues.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1347,6 +1347,15 @@ public void s968()
13471347
Assert.AreEqual("One or more errors occurred during the valuation run", ws.Cells["E40"].Value);
13481348
Assert.IsNull(ws.Cells["D41"].Value);
13491349
}
1350+
1351+
1352+
[TestMethod]
1353+
public void s973()
1354+
{
1355+
using var package = OpenTemplatePackage("s973.xlsx");
1356+
package.Workbook.Calculate();
1357+
Assert.AreEqual("12,35²", package.Workbook.Worksheets[0].Cells["A3"].Value);
1358+
}
13501359
}
13511360
}
13521361

0 commit comments

Comments
 (0)