From 31278e366ca794d44479067ad62647c1356bdb41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikael=20Sj=C3=B6blad?= Date: Thu, 27 Mar 2025 18:27:22 +0200 Subject: [PATCH] Issue #700: Fixed exception thrown for center-aligned cells --- .../ExcelOpenXmlReaderTest.cs | 17 +++++++++++++++++ src/ExcelDataReader/CellStyle.cs | 4 ++-- .../OpenXmlFormat/XmlFormat/XmlStylesReader.cs | 12 ++++-------- .../Test_git_issue_700_CellAlignments.xlsx | Bin 0 -> 8736 bytes 4 files changed, 23 insertions(+), 10 deletions(-) create mode 100644 src/TestData/Test_git_issue_700_CellAlignments.xlsx diff --git a/src/ExcelDataReader.Tests/ExcelOpenXmlReaderTest.cs b/src/ExcelDataReader.Tests/ExcelOpenXmlReaderTest.cs index 3778b506..8e787f0f 100644 --- a/src/ExcelDataReader.Tests/ExcelOpenXmlReaderTest.cs +++ b/src/ExcelDataReader.Tests/ExcelOpenXmlReaderTest.cs @@ -490,6 +490,23 @@ public void GitIssue642_ActiveSheet_SingleWorksheet() Assert.That(dataSet.Tables[0].TableName, Is.EqualTo("List1")); } + [Test] + public void GitIssue700_AlignmentEnumParsing() + { + using var reader = OpenReader("Test_git_issue_700_CellAlignments"); + reader.Read(); + + var general = reader.GetCellStyle(0); + var left = reader.GetCellStyle(1); + var center = reader.GetCellStyle(2); + var right = reader.GetCellStyle(3); + + Assert.That(general.HorizontalAlignment, Is.EqualTo(HorizontalAlignment.General)); + Assert.That(left.HorizontalAlignment, Is.EqualTo(HorizontalAlignment.Left)); + Assert.That(center.HorizontalAlignment, Is.EqualTo(HorizontalAlignment.Center)); + Assert.That(right.HorizontalAlignment, Is.EqualTo(HorizontalAlignment.Right)); + } + protected override IExcelDataReader OpenReader(Stream stream, ExcelReaderConfiguration configuration = null) => ExcelReaderFactory.CreateOpenXmlReader(stream, configuration); diff --git a/src/ExcelDataReader/CellStyle.cs b/src/ExcelDataReader/CellStyle.cs index 909d0cac..301a78cb 100644 --- a/src/ExcelDataReader/CellStyle.cs +++ b/src/ExcelDataReader/CellStyle.cs @@ -16,9 +16,9 @@ public enum HorizontalAlignment Left, /// - /// Centered. + /// Center. /// - Centered, + Center, /// /// Right. diff --git a/src/ExcelDataReader/Core/OpenXmlFormat/XmlFormat/XmlStylesReader.cs b/src/ExcelDataReader/Core/OpenXmlFormat/XmlFormat/XmlStylesReader.cs index ac1c6c9c..ef50e495 100644 --- a/src/ExcelDataReader/Core/OpenXmlFormat/XmlFormat/XmlStylesReader.cs +++ b/src/ExcelDataReader/Core/OpenXmlFormat/XmlFormat/XmlStylesReader.cs @@ -130,15 +130,11 @@ static void ReadAlignment(XmlReader reader, string nsSpreadsheetMl, out int inde if (reader.IsStartElement(NAlignment, nsSpreadsheetMl)) { int.TryParse(reader.GetAttribute(AIndent), NumberStyles.Integer, CultureInfo.InvariantCulture, out indentLevel); - try - { - horizontalAlignment = (HorizontalAlignment)Enum.Parse(typeof(HorizontalAlignment), reader.GetAttribute(AHorizontal), true); - } - catch (ArgumentException) - { - } - catch (OverflowException) + + var attrValue = reader.GetAttribute(AHorizontal); + if (attrValue is not null) { + Enum.TryParse(attrValue, true, out horizontalAlignment); } reader.Skip(); diff --git a/src/TestData/Test_git_issue_700_CellAlignments.xlsx b/src/TestData/Test_git_issue_700_CellAlignments.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..2457352fa56088f99812417eab0d4dbd7bff6032 GIT binary patch literal 8736 zcmeHsg_x4Z%5`uuVbax2SAvrYC2sm_%#885Cr-X#kQqo8a9TJk#-O`BE&^dgg z=bWGCc;4?Xc;CIRd7f*o+4tJBpJ(0cUVANdB@|Rbz#RYv005u?C`%#Zn;-!Iv8Vt5 z0RRKp@QH)Hi-o<5iI#_>g|iXo%NJnkY*b|CEC4d%`u`pO#Vb&fprYErjTd~TFi&&% zfWcm$Iw-}ZZRkF$2JZ6}MYD+tj-l%6TC0^BjQ67fv(X&g8D}j`6{2M2!l@iI*|0Lg z4pVAgN9a`701zhN-RB@1lAES8DZ>1jOg*Z&KXSx{62MpHrWcXKJg*q;ik05pj_%kr zc0SFrVv*LHwOya$-}DgM-h7wRKPSx-M#=#ARrAlRzxiLt~EI_cuR- z;=~eKY?N_kry^eyFmubOlNkcG!EqbePrG*O&Mur`^p}1VWC=p1_Tg;pjCJT0<7 z6nWofpXTa$_)=3cMjsT{299Jc^J9V(WQRP0!1aCZwP4mWF(+70lXx zGnDE(m6ZPtM`DfyjON8Pdl}lE|7MYXD zoP6bnuCO~KrG2k-d=};X!8}`1~fQA?=4yI@MqL-~1Nu%jG*_NP^hM<_iJ4$3- z-jnG`H^zQ4>OEPSV`ub;5?-t!D%QejZzNE8xK%09wbwZTcI4bEX5fl+x-Y?E5Hhlo9= zu#jwD=Y#LD)y-1D@`-anGt-|8e6W)ZE? zUmS5-JowfHIM{Y8-UbRG z&U<9bzSe-jkMjLX-cCB(Rr9Yi{3P{mlIUgLa%O_C5XCf^jKb)5rpvc={lns&SXVG> zJ`;B*qY;2FIeD0NX_S%GfjeV{M%jo$ugDn78O;W|Hu%3@r2|f z1Tz{CEFlA6AR!p?hm!oACx5955+ch(So!ZhN;FlJI=S(hvEZTH?x}7>_%kkCv^(10 z?_u;-v&=El@cA4sk+U`!=}jtep*Vzi><@Iiojt-`K_NJ4V=IWbkLpPP-WNf07&sb0 z!7$w|eHb8*MsR;;`+M;&7H*0&LA`i<4|@jT2GY=+d|H{~`q2=6+d*zuUR&p3 z%05I??XO<*y9|1|QyNfRTT7k7V!3`>|77m;PG*1y)yNSkrlKg02Vi7toQCbZP4*Py zu<6=T#beN}E$0$@ouXLjVbLQouMijN&>ndzUzT|1_3U?z+WX5c(pP;ft#gO${m1*3 zYrWkQONgERcTi>9@t*fVxC;sz06>Dc;?JP!Y;9rT;>`7P;`tF>)842!%>9rblv66y z1pBA`-&7?CFl21&6mj%Cc=;Wb@<{X~ob#5~0_=F5BVm6Akjcy*wmT$+y z2XLoQpCaW|XCOSsLk?(-2VG1WT0>bEDU#SbjX@~ zAv5DK%bDJ#SKV1~tOQ~Tzj^zn$Sl%WAl6<)fB5GtiQ9qK(Z zzpr&7B}aBNV1+G-pL_musAL&bP~mV=WLK=NV(H`3Wvz4a%W66m1G4vzF))@IK_vV8>PDn02@CldI zW9q^MB4m_c=WPZ_zv`_#Ne3}hDP(%dK;z49l8+<#zA{w3ah7%2rsWcT)zd^D-!5M- zuEy+(iMP;f?lI|No^Wy#2jv;Hx-lJyr43G}<@T4|n)8-bd#foV4B}g`>|NTiU#soi zoC>;+_(wSfh{dXXM%uotNSKj=vRV#Dby6lR6J~IbsKo{uwv-GCHJ~W&$*tLuS5o!hQP(bacar4BXkMdsxx?cG$&JdEj`~S^-1eT)a;ZC1yRV(* zNpZ*@7zbjvR0Qs$fm)x|9*~(I3{ZOUZ$sPTf~T_H#vgkTFMy$Q0~F1{>?C3??IHt~ z!()Uqd6x&2joFaN*K0CSIq#-)Uxrp8PBX<`di|CZdT@9#tH9XHn=hl(PYdL z!U%Ly553(c{>Jvg$;D4Y(Ex_bX!=1B2J4J^qwIEro;ATGWqfly)=w3up=#VisR5v>?= zFp}D2Sc9WCIQ4)flzkO>(L}7OF5|NoLwL?+sFNvD3~7#cSNffo1(&S)FDrq`dxIB6 zQLmzggNyf(fE?&CI;6R}E1E)K6|zSO*;?5QsujoMd~UBR%v>_@O=nKtetAp)rfD7u zo09LeiN}0r;ID;28IO8h>4uN0Ygi-XvwcG98toaz1*TWVlA&B=vT|TUW z7t%9`&I9CSvWoAr*!i$RAx-GQs?T6QXqs@Chz>n*Df=mHSv0wWVA^;j{ zI`hl@S8r#IoK%Q08Y`7!m~`BBomQe=!)5*VqdaXfsJE*@Sf-h zb(Ved^xM(XK4W>H&RE!BDJc689~8VpYFsJi^?GXR{t#In=E@a+rr%WQa605|6z<)a zt(_)pQ5to)RMX?=Lj}LrnvOB2He%6nP`AQY%de*%)n19d#6bpA4T8Iv=?T1ATnI^Qs)m8RQIc3W{S(>6Srv*j_JSB)s#!3Y< zb$WSHQ+HL3%+R`mkbASmtR-O2yh`JHp!1Srko>GdcT8u|AjQpBdje#(Kz;tsiyBke4=q^NfqxQ25f`E^yRH+>(2%4D*8$w7uo5 z@@fNWpkJm(CGt7jCXWaTZm9a!ZMd#f5}`eAY5_SrNt>IY7s1flKQC^Yt+1jT9CY#AxZ)ME9$|5x1^iiz_%Wvo!Nw{dgzF2lL#u+9YZrBJW zts!#Jc~z5TumjQH1J$Xq|&$b(e5Ab}~(R1KvuKK1O8L#q)J7~zN_jJi&IOIo< zR;@^)4q-@h!Gv8*_Ttg}4L9UXptGUh1%LUgTSPkgZ{Z(&>~KAeNLI5D;*ax(@H@MB zfGwPVWT;KrOLlYIcs^7+zIdMQ7L9I6sB?KXWXxcTVcgTAX$WmTm7J#V2eaEN)tWbT zE?_&XSK+Q7#@yX6#f>T>b?zR2idr{Ve=Ll}V_Gy$q?=0NTW^B)G^!-0C|jB>X;rN1 zJp1J>XO%tI^g~Ix@_p3zX zljRJJ8u>mkG?aPtW+aQy@k#d++^25EWdSOZNPKI4R4xMy1Kpb+3ymz9?9mtyzf3MZ<{T8Fj>pYW%(G+bs5z8lUtm2ntgS4doAQK4|`U6Jf_p;1RUxUurR5x zy9R7XW$iw&zhl~lm$l>}KK$-l5#fy&uOWrK<+}kQKeYAk-?mPblW^)s+?ZvceHf{yaGD44A z9cze5xu7U~H7J@r9pK}`;m#;i0yMdsu8Qa#s5}y zaO`=a91IfAUN)vJTqNebK8&MCc(OW2oHH@K`xBAJ1XRq7twsYgj><8T9ot72S(#Gea zOL1k$NKjYXky{HqY9zXO#YP*}eP(&5DGMkA zsS$1UflSD#3R8&wcpXE{aKy1;X}v9vXU2zzHp*oz@?3Nqa?Y6}Q}eXIo#RU8N#RS$ ztRntcJw1Oi=J`AG-ZP}QgJB}npwsk`l_;O$81WTt_yVpX_wC$M>)FhrhrW%(h$r~> zGopuUg@hqe{|6|D93N4}Fn2Ihhd4MobD23nEdK0K{jYj~Sh^_9Hq})`^@46!LZ;<| zs=?jj0-Vvk2m%EK7ie+wJD56l_=}mR(ziZLP6~#d{;5k%f@*w2RSlkYsXIhZ_y@~m zh1g_59;6AlH9lw+oVsw2lhxEI?$Uo2DJJKn?JHvFU;YWL32V@dI*`YViJa}g4kok4 z#zH3wDqe{qO6rv-Hju^c(D6j$vW$-2c(Cu4gQZypTL?=;v?a)j`_gloc^o9n4`2BLSX zkO@zKPh>;LN^}no)^z8^MCsI7)%-9q3VMQNl>N+n+PpUdUVllW-WwsIAyK>bDBREe zv@Ivwu)gHQU*Nm*rlXszAGsw3jvW8hk01M8-i*3cnsg%XD=Rp=4}A7nq^I$hWRHrT z&E(X>Y}UbI(~I(@>)ci~2BKM~d@hm7Z->`Cu!XFLxElEOMkHr}m^gyA;W29&gu7j+ zZQh!~Eo+y5yk7s_%%Ms(irh!+P6Wb*@&4|plqGrmh}AOdV3hrhxmKyzBNyn<4-*33jb;Zlu-P?xM%j%ortZIRueUJDYO z_PITuL93q91?#B#_B-pr9*TrCi2!|WWM__;yiTa*3>C<+-jr0|h6Sh0F-2JR1-a<_ z8(%6wWW%Uu-g9<89RA41DC_U)#1n6&$qzH(had@A0q}r8m-tKFb6_KuxJG_WSm?+T zu8fL%7;-mzJR+fGf#%UEIU;1)9pOsO$DQY$V-B^PC|JG_#)pID(0=W_awvTE(1>q) zGyD`0#r}wKNXQ(BnEju7@qaDKU-N(H%&RN?)4)HQhJOKn%x@95{96n0ci``hlwZ*1 zJO5V!{Hv|+g~wl(?qmPopZHf9@^>r0mx6v->B9Yw zg`wXK{GL+&GSK?qr-5Gy=I_worT7=Lo%9dr@521Mg?|d&FFXK{PX++|OZI+;|1;41 f9d1GSH~61nM_maGvAY1kUBu~!$SoqMeti3XJ-ap_ literal 0 HcmV?d00001