From e2e3923c9c97f1ef6d6e415655427f89b5a3dad2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?AdrianParn=C3=A9us?= Date: Mon, 26 Jan 2026 11:03:22 +0100 Subject: [PATCH] fixed checking for negative sign when using custom number format. --- src/EPPlus/ExcelRangeBase.cs | 1 - src/EPPlus/Utils/String/ValueToTextHandler.cs | 7 ++++++- src/EPPlusTest/Issues/WorksheetIssues.cs | 12 ++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/EPPlus/ExcelRangeBase.cs b/src/EPPlus/ExcelRangeBase.cs index 1a3a6312ce..a681380e37 100644 --- a/src/EPPlus/ExcelRangeBase.cs +++ b/src/EPPlus/ExcelRangeBase.cs @@ -816,7 +816,6 @@ public string Text { get { - object value; if (IsSingleCell || IsName) { diff --git a/src/EPPlus/Utils/String/ValueToTextHandler.cs b/src/EPPlus/Utils/String/ValueToTextHandler.cs index 05a335c0c1..3325a47d7f 100644 --- a/src/EPPlus/Utils/String/ValueToTextHandler.cs +++ b/src/EPPlus/Utils/String/ValueToTextHandler.cs @@ -231,7 +231,12 @@ private static string FormatNumber(double d, string format, CultureInfo cultureI private static string CheckAndRemoveNegativeSign(string format, string s, string ns) { - if ((s.StartsWith($"{ns}{ns}") || s.StartsWith($"{ns}-")) && (format.StartsWith(ns) || format.StartsWith("-"))) + //This regex pattern ^(\[[^\]]+\]|[\\'\""\*_])* removes: + // \[[^\]]+\] : This part removes Anything inside square brackets + // [\\'\""\*_] : This part removes Backslashes, quotes, asterisks and underlines + string trimmedFormat = System.Text.RegularExpressions.Regex.Replace(format, @"^(\[[^\]]+\]|[\\'\""\*_])*", ""); + bool formatStartsWithNegative = trimmedFormat.StartsWith(ns) || trimmedFormat.StartsWith("-"); + if ((s.StartsWith($"{ns}{ns}") || s.StartsWith($"{ns}-")) && formatStartsWithNegative) { return s.Remove(1, 1); } diff --git a/src/EPPlusTest/Issues/WorksheetIssues.cs b/src/EPPlusTest/Issues/WorksheetIssues.cs index fb4b12423e..9ab79e6408 100644 --- a/src/EPPlusTest/Issues/WorksheetIssues.cs +++ b/src/EPPlusTest/Issues/WorksheetIssues.cs @@ -1079,5 +1079,17 @@ public void testRepro() } SwitchBackToCurrentCulture(); } + + [TestMethod] + public void i2258() + { + var p = OpenTemplatePackage("repro2.xlsx"); + var ws = p.Workbook.Worksheets.First(); + var a1 = ws.Cells["A1"].Text; + var b1 = ws.Cells["B1"].Text; + Assert.AreEqual("-/- 1 000", a1); + Assert.AreEqual("-/- 2 000", b1); + } + } }