From 33609515779e4de4135af77bca9a97d504242767 Mon Sep 17 00:00:00 2001 From: Alex Rothberg Date: Wed, 31 Jul 2013 09:04:07 -0400 Subject: [PATCH 1/2] ENH Pass kwds from ExcelFile ctr to xlrd.open_workbook. For example, this allows setting formatting_info=True (GH4438) --- pandas/io/excel.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/io/excel.py b/pandas/io/excel.py index 534a88e303dbf..031081f557794 100644 --- a/pandas/io/excel.py +++ b/pandas/io/excel.py @@ -78,10 +78,10 @@ def __init__(self, path_or_buf, kind=None, **kwds): self.tmpfile = None if isinstance(path_or_buf, compat.string_types): - self.book = xlrd.open_workbook(path_or_buf) + self.book = xlrd.open_workbook(path_or_buf, **kwds) else: data = path_or_buf.read() - self.book = xlrd.open_workbook(file_contents=data) + self.book = xlrd.open_workbook(file_contents=data, **kwds) def parse(self, sheetname, header=0, skiprows=None, skip_footer=0, index_col=None, parse_cols=None, parse_dates=False, From 820bc5dc35114453d8e92959c30b9c18b3b4b851 Mon Sep 17 00:00:00 2001 From: Alex Rothberg Date: Fri, 16 Aug 2013 19:30:17 -0400 Subject: [PATCH 2/2] ENH Unit test for setting formatting_info=True when creating ExcelFile so that merged cells may be read (GH4438) --- pandas/io/tests/data/merged.xls | Bin 0 -> 16384 bytes pandas/io/tests/test_excel.py | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100755 pandas/io/tests/data/merged.xls diff --git a/pandas/io/tests/data/merged.xls b/pandas/io/tests/data/merged.xls new file mode 100755 index 0000000000000000000000000000000000000000..14b20be0788b335efea2a5d4753e8c26c34ed918 GIT binary patch literal 16384 zcmeHOdvH|M89#Tk$=(oz1VTWbOL&ElU`PN#9?L^TYj}*}U@H!UWEWCmLgQj##+2CV zKS~`<6k4El)H>6u)r!`~)K=(pw12GDX|+_V9qfQ(t5Zj6r`1unzu!6c?%sRuW3%H- zs}3h~?%wm=bAI1xw9B~+81>$hTa}Y-$jzokBh$_TUh@%m! z5yv3bAdW>Ghj=dHctqL=<7CJC7f4NCT2U_-J@`wDxVT7ky5zkQ~BB98Yatx&?^M0*K(46CFJZ3bmH2E$s0 zH$xl&wGuvsRJJ_*4xf+6e9y?|GJH8{G>Xa{i<=hV8^@@tA}eIR@5*Pbe2&1=5Kqc7 zuSv>0Frnoz^gITGN)nQAc&z~sQrG`Go(gEXOLLDX73mxg9#Jzvy|W+Apvl=`?WnU&mJCkdNpFR=)< zjkS<#OWles;4)Xt#vh70%hku7h3ez35(&{DE^sqbHE{EjqB&S55_zTz#T@jcJX5=T zj;~!T=BT|qwIt$A4$Kns_J0H!3q&Q zAoFu2r0A*Cvs0d(BBD=9dMSK}r2hvQWU%dXb^yI0fL`xQ=gLdsYyO0*Hc8Lfzq03; zO@CQz!0QyuucVw@?aBO#j_NBqSAZ5hj#pG)qicM*LX`P)`cd}J)uM&76|YznDjcpV zB|RtSgO=Vb`jM)tnu;3e`H-Y@^=acPJuCf}VqBJVP0w7-O1dUzwM~B+Q#`Rerw6WP z{qlnh-;IHe6=8s%xxuU!H&Ai8kPx%p>)X|5Hi|wMof#rnJy*+>Hpc)Co)~uOM_{Cm zcndH~Q3W_26jgvrmZA!9-B45ky4s=&u&s(JKw~bd02`&K0yO`k3b5Z5Re+ABr~>RU zMHOI|EUEzeSWyM&6pJb_r`Q4w#TIBRw!qwC3t)0tT&0(|3b6kUc$O%5kN4gP+bi z6&8u2{`~OVdoN~#>tE*rIU>sZL9)+>ft>FKNd`!gedmZnk~_5KTmX=mY)(p@NL(Kv zN#^@GkeF4)ef#!h<5pm^6TnF;chK-jhG9OmK2sNJG4eWvO85(P=FAz7P>DpsBb1Y7 z3q_hG6PCtGcqh#(6jpi;p+4#hP`95@POW@4P3gUHA%s%Bk=pkNWi!k68#zsRYgV7D z8SS6J*QD>i|Nb0^Z39l#+RU7^p{rZ(n9CrB>X@t<+RAMM-db>DO&JYq;hE0Z9W$HF zcxrL<=uwZ+IB9k*NCUPEw$V6g-YL_0$eXVP?ZBnlKJ!YgKQ2XqXwJQQYC*lTdQPWC zz1uXqKYIOEElTD6HWJ=Own2jZ7U!9H5RY`!afwK#oYHwE;aN;UkW6bh2sVlwAV~OC zM|b{u@0m6f5On|*tP?J>3RWkX;>0r;glAI)K{Bo3AnMS}9-4vZuaj_)=`KkEK-7U; zaCNv~DOjCkigW8=ka0r+$+U)p@Nh3L2@?J~2?v=m6cBo!uq-X*68<^~2bnn(5OrW1+{9e)7OYM(#T8O82+wj0f@E65LEZ&}4l-*f zAnE`+xH{atDp;Llii^Nt5Z;3*2$E?H2bt;uLBd}rZV-JOUyfq=3AV@V2P31fdx6zp zbJL7?V|-Q*7}3eubFfX{BxZ=XXhd9z1Il)xjwjWU#K2{MSTvdX z^Xd1qrFulzG+0=)y;lif`(=+4xvmO9&gMrDa+_e&un0HWSHaVYsEm!DitQEUmfauE$O& zHgsqRIiEI3XX9gO(?i%eEv>ob)q{8Wvze^3@v*eJ5H?OrYi{}V9}oGnnWD4tv9yK| zHcm@xZaI3-^Zsn&IvXELYYJiGw6x}y!51tKt+&loosEyB%@1MYw6x}ykB;5$SDWG3 z{>MZuH*T)f#?49DSm0PG#QGb5=?^+B4+@LYL8oePHIcV4Xd)8R4QdlrBb$3Dm92*-Z}jx*#R@|7NxWVOjhIaoVvUR zUV?cW`pb~FPRm<{tIYYlad9<9f@@ermTBydqRdRKOf+kv%x+x#>XmcfcI#>+xy(Cj4;h_>GeLAOIdwMLL8fDSX|(mn-8Q;b0}

8O zBe2MDfW!Cc;8i~0%Krs`XA?g@_7_xy;4MyY_&^Q=G2Y^*w?k7|Y;cQvCwmvBfQ`A;5ASEWKCW z?j@9^eFLxg#cDY&I09l_PdYhZZgXQqhM~U@BMqUrImuOz6a_omwoBu#bl%ablFHP2nDWF(qrBdjBhhNHf`)@~4Dsf6fB z(*m@;hmvz81Qo7YKPrvNwZA~U+kQmV)=tsHs>Cw1k=WGM+fA3H+-t%uXruz3dJ{PG zqF>ow%g?QH5SJRh&Adw7=GY{;9kr{%-$sCJleN79BJY)NYf*PPL*6T23@vtw>!k(d zbFc?($0(YHt6V6y8a#Em8MWHMGiX@G6+4p2^t?mnIC03qQ<<$gZn+Qlw(oO%W4Zk> zV*`K34HHp_N$(iqW8Cs2IwP`Q*?n!YcYCq}#9K{ zu7T1A!0&+L%c|3cI1Jih2aWRW2W`KDMj+mZQ1{F$UH8l@BGvpX1LgY`4scE(o&$dD zXAx*|qvAY>CuTd|@8SI)NJT9h5gH8MhX)&CY-cSq;A!J;|ReNb1aunBT|N61E~|> zu@3ZVSlDvx%{{>lc(H;HE8L1!yVWIe1Q<ijtTVik%E^k<*d^L1~2B&9R6!1O+p= zTrRm#wRrx+*|*QH29!l{kX8Sq1>eq*iG#HKpDpe;^Z&NahA*cEKE()ED#sr*v?I_i zPTqX?nGe_RsC@7aQ_Pw5*sD#TeGieg!S5>&>0vKHq#xLbI0|tqB1e-wh}f7DHzAHj zG(x^+LK+9*Gp@@vh~EF7mXG8-v6gNQ+%i0 zewGkc|HvyZymDmjgv!B#sDHzU53~NiL1dp`{Wl=;;@ee-JX7vK-cx z5IK_Ggh+ktN2Gr4M)cE%s?%_Zg)D);lfi^?uszg_K@10pkW?u}+0@g!^Eyr@u9H2S zx!u9Amc_d;;oK&^?*2H06#om$*)xVvMA`~p m+mot0#+#d(TH-n5k|V~d&QxlVg!o|b(QoKjXVafg4g41))W_ri literal 0 HcmV?d00001 diff --git a/pandas/io/tests/test_excel.py b/pandas/io/tests/test_excel.py index 1ac4d4e31ed10..07ea633987210 100644 --- a/pandas/io/tests/test_excel.py +++ b/pandas/io/tests/test_excel.py @@ -260,6 +260,24 @@ def test_excel_table(self): tm.assert_frame_equal(df4, df.ix[:-1]) tm.assert_frame_equal(df4, df5) + def test_excel_read_merged_cells(self): + _skip_if_no_xlrd() + + pth = os.path.join(self.dirpath, 'merged.xls') + xls = ExcelFile(pth, formatting_info=True) + book = xls.book + sheet = book.sheet_by_index(0) + merged_cells = sheet.merged_cells + + self.assertEquals(len(merged_cells), 1) + rlo, rhi, clo, chi = merged_cells[0] + + self.assertEquals(rlo, 1) + self.assertEquals(rhi, 1+1) + + self.assertEquals(clo, 0) + self.assertEquals(chi, 1+1) + def test_excel_read_buffer(self): _skip_if_no_xlrd() _skip_if_no_openpyxl()