@@ -13,6 +13,7 @@ Date Author Change
1313using System ;
1414using System . Collections . Generic ;
1515using System . Globalization ;
16+ using System . Security . Cryptography ;
1617using System . Xml ;
1718
1819namespace 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