From 27b60757119c77c986a0e170a2430a3a191fb585 Mon Sep 17 00:00:00 2001 From: swmal <897655+swmal@users.noreply.github.com> Date: Thu, 19 Feb 2026 16:49:03 +0100 Subject: [PATCH 1/2] Started work on ticket --- src/EPPlusTest/Issues/PackageIssues.cs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/EPPlusTest/Issues/PackageIssues.cs b/src/EPPlusTest/Issues/PackageIssues.cs index 4aa0d722d..495281bb1 100644 --- a/src/EPPlusTest/Issues/PackageIssues.cs +++ b/src/EPPlusTest/Issues/PackageIssues.cs @@ -1,6 +1,10 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using OfficeOpenXml; +using System; +using System.ComponentModel; using System.Drawing; +using System.IO; +using System.Linq; namespace EPPlusTest.Issues { @@ -161,5 +165,26 @@ public void XmlIssue() SaveAndCleanup(package); } + + [TestMethod] + public void sc1012() + { + string path = @"C:\\epplusTest\\Workbooks\\import_template_simple.xlsx"; + + Stream excelFile = new MemoryStream(System.IO.File.ReadAllBytes(path)); + + using (ExcelPackage pck = new ExcelPackage(excelFile)) + { + ExcelWorksheet sheetSap = pck.Workbook.Worksheets.Where(pr => string.Equals(pr.Name, "SAP data", StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault(); + sheetSap.Cells[1, 1].Value = "Test"; + + pck.Save(); + pck.Stream.Seek(0, SeekOrigin.Begin); + byte[] buffer = new byte[pck.Stream.Length]; + pck.Stream.Read(buffer, 0, (int)pck.Stream.Length); + File.WriteAllBytes(@"c:\temp\error_report.xlsx", buffer); + + } + } } } \ No newline at end of file From ba7749ef1e3939627207dc3e49a6e02de850b2f3 Mon Sep 17 00:00:00 2001 From: swmal <{ID}+username}@users.noreply.github.com> Date: Fri, 20 Feb 2026 10:16:42 +0100 Subject: [PATCH 2/2] #2295 - Fix culture-specific DateTime in PowerQuery metadata --- .../ExcelPowerQueryMetaDataEntry.cs | 8 +++---- src/EPPlusTest/Data/ConnectionTests.cs | 20 +++++++++++++++- src/EPPlusTest/Issues/PackageIssues.cs | 23 ++----------------- 3 files changed, 25 insertions(+), 26 deletions(-) diff --git a/src/EPPlus/Data/PowerQuery/ExcelPowerQueryMetaDataEntry.cs b/src/EPPlus/Data/PowerQuery/ExcelPowerQueryMetaDataEntry.cs index c0872575c..1ebf15ee7 100644 --- a/src/EPPlus/Data/PowerQuery/ExcelPowerQueryMetaDataEntry.cs +++ b/src/EPPlus/Data/PowerQuery/ExcelPowerQueryMetaDataEntry.cs @@ -153,11 +153,11 @@ public string GetValueAsText(CultureInfo culture) } if (Value is int i) { - return "l" + i.ToString(); + return "l" + i.ToString(CultureInfo.InvariantCulture); } if (Value is DateTime dt) { - return "d" + dt.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ"); + return "d" + dt.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ", CultureInfo.InvariantCulture); } if (Value is bool b) { @@ -165,11 +165,11 @@ public string GetValueAsText(CultureInfo culture) } if (Value is double d) { - return "f" + d.ToString(); + return "f" + d.ToString(CultureInfo.InvariantCulture); } else { - return "s" + Value.ToString(); //You shoul never end up here. + return "s" + Value.ToString(); //You should never end up here. } } /// diff --git a/src/EPPlusTest/Data/ConnectionTests.cs b/src/EPPlusTest/Data/ConnectionTests.cs index 6fc695598..12499eddb 100644 --- a/src/EPPlusTest/Data/ConnectionTests.cs +++ b/src/EPPlusTest/Data/ConnectionTests.cs @@ -3,7 +3,9 @@ using OfficeOpenXml.Data.Connection; using System; using System.Data.Common; +using System.Globalization; using System.Text; +using System.Threading; using System.Xml; namespace EPPlusTest.Data @@ -193,10 +195,26 @@ public void ReadEPPWebPowerQuery() SaveAndCleanup(p); } } + [TestMethod] - public void AddPivotTableWithConnection() + public void GetValueAsText_DateTime_ShouldUseInvariantCulture() { + var cc = Thread.CurrentThread.CurrentCulture; + try + { + Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("fi-FI"); + var entry = new ExcelPowerQueryMetaDataEntry("FillLastUpdated", + new DateTime(2026, 2, 19, 8, 15, 36, DateTimeKind.Utc)); + var result = entry.GetValueAsText(CultureInfo.GetCultureInfo("fi-FI")); + Assert.IsTrue(result.Contains(":"), + $"Expected colon as time separator but got: {result}"); + } + finally + { + Thread.CurrentThread.CurrentCulture = cc; + } } + [ClassCleanup] public static void Cleanup() { diff --git a/src/EPPlusTest/Issues/PackageIssues.cs b/src/EPPlusTest/Issues/PackageIssues.cs index 495281bb1..92389dc46 100644 --- a/src/EPPlusTest/Issues/PackageIssues.cs +++ b/src/EPPlusTest/Issues/PackageIssues.cs @@ -3,8 +3,10 @@ using System; using System.ComponentModel; using System.Drawing; +using System.Globalization; using System.IO; using System.Linq; +using System.Threading; namespace EPPlusTest.Issues { @@ -165,26 +167,5 @@ public void XmlIssue() SaveAndCleanup(package); } - - [TestMethod] - public void sc1012() - { - string path = @"C:\\epplusTest\\Workbooks\\import_template_simple.xlsx"; - - Stream excelFile = new MemoryStream(System.IO.File.ReadAllBytes(path)); - - using (ExcelPackage pck = new ExcelPackage(excelFile)) - { - ExcelWorksheet sheetSap = pck.Workbook.Worksheets.Where(pr => string.Equals(pr.Name, "SAP data", StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault(); - sheetSap.Cells[1, 1].Value = "Test"; - - pck.Save(); - pck.Stream.Seek(0, SeekOrigin.Begin); - byte[] buffer = new byte[pck.Stream.Length]; - pck.Stream.Read(buffer, 0, (int)pck.Stream.Length); - File.WriteAllBytes(@"c:\temp\error_report.xlsx", buffer); - - } - } } } \ No newline at end of file