Skip to content

Commit d533f64

Browse files
authored
Merge pull request #2262 from EPPlusSoftware/bug/issue2261
Fixes issue 2261
2 parents 8c3fe47 + de22714 commit d533f64

1 file changed

Lines changed: 63 additions & 9 deletions

File tree

src/EPPlus/Data/PowerQuery/ExcelMetadataItem.cs

Lines changed: 63 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Date Author Change
1313
using System;
1414
using System.Collections.Generic;
1515
using System.Globalization;
16+
using System.Security.Cryptography;
1617
using System.Xml;
1718

1819
namespace OfficeOpenXml.Data.Connection
@@ -33,30 +34,83 @@ internal ExcelPowerQueryMetadataItem(XmlNamespaceManager nsm, XmlNode topNode, C
3334
var type = node.GetAttribute("Type");
3435
var sv = node.GetAttribute("Value");
3536
object value;
36-
switch(sv[0])
37+
var prefix = sv[0];
38+
var s = sv.Substring(1);
39+
switch (prefix)
3740
{
3841
case 's':
3942
case 'S':
40-
value = sv.Substring(1);
43+
value = s;
4144
break;
4245
case 'l':
4346
case 'L':
44-
value = int.Parse(sv.Substring(1), culture);
47+
if (long.TryParse(s, NumberStyles.Integer, CultureInfo.InvariantCulture, out long l))
48+
{
49+
value = l;
50+
}
51+
else
52+
{
53+
value = s;
54+
}
4555
break;
4656
case 'b':
4757
case 'B':
48-
value = bool.Parse(sv.Substring(1));
58+
if (bool.TryParse(s, out bool b))
59+
{
60+
value = b;
61+
}
62+
else
63+
{
64+
value = s;
65+
}
4966
break;
5067
case 'd':
5168
case 'D':
52-
value = DateTime.Parse(sv.Substring(1), culture);
69+
if (DateTime.TryParse(s, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out DateTime dt))
70+
{
71+
value = dt;
72+
}
73+
else
74+
{
75+
value = s;
76+
}
5377
break;
5478
case 'f':
5579
case 'F':
56-
value = double.Parse(sv.Substring(1), culture);
80+
if (double.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, out double f))
81+
{
82+
value = f;
83+
}
84+
else
85+
{
86+
value = s;
87+
}
88+
break;
89+
case 'c':
90+
case 'C':
91+
#if (NET8_0_OR_GREATER)
92+
if (Guid.TryParse(s, CultureInfo.InvariantCulture, out Guid guid))
93+
{
94+
value = guid;
95+
}
96+
else
97+
{
98+
value = s;
99+
}
100+
#else
101+
try
102+
{
103+
value = new Guid(s);
104+
}
105+
catch
106+
{
107+
value = s;
108+
}
109+
#endif
57110
break;
58111
default:
59-
throw new InvalidOperationException($"Invalid or no data type on Power Query meta data entry with name {type}");
112+
value = sv;
113+
break;
60114
}
61115
Entries.Add(new ExcelPowerQueryMetaDataEntry(type, value, true, false));
62116
}
@@ -72,9 +126,9 @@ internal ExcelPowerQueryMetadataItem(XmlNamespaceManager nsm, XmlNode topNode, C
72126
/// <summary>
73127
/// A collection of metadata entries.
74128
/// </summary>
75-
public List<ExcelPowerQueryMetaDataEntry> Entries
129+
public List<ExcelPowerQueryMetaDataEntry> Entries
76130
{
77-
get;
131+
get;
78132
} = new List<ExcelPowerQueryMetaDataEntry>();
79133
}
80134
}

0 commit comments

Comments
 (0)