From de227140cafe709f6f737129739807b92ae4c061 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20K=C3=A4llman?= Date: Thu, 29 Jan 2026 14:53:37 +0100 Subject: [PATCH] Fixes issue #2261 --- .../Data/PowerQuery/ExcelMetadataItem.cs | 72 ++++++++++++++++--- 1 file changed, 63 insertions(+), 9 deletions(-) diff --git a/src/EPPlus/Data/PowerQuery/ExcelMetadataItem.cs b/src/EPPlus/Data/PowerQuery/ExcelMetadataItem.cs index fb1ebfc25..369794c27 100644 --- a/src/EPPlus/Data/PowerQuery/ExcelMetadataItem.cs +++ b/src/EPPlus/Data/PowerQuery/ExcelMetadataItem.cs @@ -13,6 +13,7 @@ Date Author Change using System; using System.Collections.Generic; using System.Globalization; +using System.Security.Cryptography; using System.Xml; namespace OfficeOpenXml.Data.Connection @@ -33,30 +34,83 @@ internal ExcelPowerQueryMetadataItem(XmlNamespaceManager nsm, XmlNode topNode, C var type = node.GetAttribute("Type"); var sv = node.GetAttribute("Value"); object value; - switch(sv[0]) + var prefix = sv[0]; + var s = sv.Substring(1); + switch (prefix) { case 's': case 'S': - value = sv.Substring(1); + value = s; break; case 'l': case 'L': - value = int.Parse(sv.Substring(1), culture); + if (long.TryParse(s, NumberStyles.Integer, CultureInfo.InvariantCulture, out long l)) + { + value = l; + } + else + { + value = s; + } break; case 'b': case 'B': - value = bool.Parse(sv.Substring(1)); + if (bool.TryParse(s, out bool b)) + { + value = b; + } + else + { + value = s; + } break; case 'd': case 'D': - value = DateTime.Parse(sv.Substring(1), culture); + if (DateTime.TryParse(s, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out DateTime dt)) + { + value = dt; + } + else + { + value = s; + } break; case 'f': case 'F': - value = double.Parse(sv.Substring(1), culture); + if (double.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, out double f)) + { + value = f; + } + else + { + value = s; + } + break; + case 'c': + case 'C': +#if (NET8_0_OR_GREATER) + if (Guid.TryParse(s, CultureInfo.InvariantCulture, out Guid guid)) + { + value = guid; + } + else + { + value = s; + } +#else + try + { + value = new Guid(s); + } + catch + { + value = s; + } +#endif break; default: - throw new InvalidOperationException($"Invalid or no data type on Power Query meta data entry with name {type}"); + value = sv; + break; } Entries.Add(new ExcelPowerQueryMetaDataEntry(type, value, true, false)); } @@ -72,9 +126,9 @@ internal ExcelPowerQueryMetadataItem(XmlNamespaceManager nsm, XmlNode topNode, C /// /// A collection of metadata entries. /// - public List Entries + public List Entries { - get; + get; } = new List(); } } \ No newline at end of file