From 4ff5a2eaa77c49dbb082f303ca37a46224759ad1 Mon Sep 17 00:00:00 2001 From: Yohan Boniface Date: Mon, 31 Oct 2022 20:57:26 +0100 Subject: [PATCH] Be more accepting with None value in headers candidate (#331) We already filter out a line will only None values, and sometimes Excel of LibreOffice mistakes the real number of columns adding one or more that have no value at all. --- .../fixtures/test_headers_with_none_cell.xlsx | Bin 0 -> 32551 bytes sandbox/grist/imports/import_utils.py | 6 ++-- sandbox/grist/imports/import_xls_test.py | 33 ++++++++++++++---- 3 files changed, 29 insertions(+), 10 deletions(-) create mode 100644 sandbox/grist/imports/fixtures/test_headers_with_none_cell.xlsx diff --git a/sandbox/grist/imports/fixtures/test_headers_with_none_cell.xlsx b/sandbox/grist/imports/fixtures/test_headers_with_none_cell.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..df39fb7a0cbc80c69fc377511a764673a05746c6 GIT binary patch literal 32551 zcmeI52V7HIm$#{+(i8;*q<0h$0g)~sU8*2WdRGCZ*C43$UIhdMf^to^M2UT5#Kwpp60_ylKhjvqgcgMa6? zF3t}JIq=m6CE}mF&ry`*Tvg%Pi(1Obo3$0(>H;5vaB@B7*nxuwI4_s^3IC0saeEpVpe zd4;=#%jdLePY1C^pIn3nJ1^y;&IM)`3pcmIpzFLEXi9^@Nbl@W`}AOHzLX(F0!7!l zH>;!DPXyDZaDtIN&$mbM$EUBb=b$)^bwOx+J&rl|<)vdXrv|=Gnn}|vcEKRT zPv8yiCTrK_DrOufL-p(#Voe!?>L-1LmfXB6%EnJXXB_4%{qGMO@akPSzv?T%SPGij z5bryInkDtO6b7|L$CO0Bc^DjWk(@guWop{eaC0>uvHZ2!A4gM_==l5CsL1PhI5?C9 zIKXpE0;K&-fTqsY_gwxUL%zdTN@CUSLNAd7ts*HE;7!UzmJwI$BV(6QZ=eAQZU}(kMrAtT3D4$@?bvb!R?5q*mrPtk}G2z-RFxM%)3$30o&$Ab&7mR>DZ_*-XR%{HH3FB&~J8t4rVfEek3A^r z_fLH3I4jmUaFbw@^nK=2Q(5;aPuqqs(ypJZKBf`6*S=e!`rN|fWB&4j4_RWhSg;TK zv`RkxB7?H{zz5*xhEEG3Tc(F(jN~fiJ_G%3Jd(_5;2l;@mYU8^_g(lcot&)?u{??U zqK?meHfYr^>;(K~P=TsoipA~T#>T<|VLp%JdAwry1o^L>_~ndlpIPnNSa$(k-Cp+@ zwsJB{@4FMCRC*W)jP3D@ks14lqXSOP33K!003tx4;0l(wO^OAQ&-{GD22|i-k zcHI$@o)11Z&6jrZ3}?LqG_youRn}5q_bAe-(tBiYE{4gC1lk6A1&O~OVUw>+JS(A` zn(L7LaN-=Tos3toa`c48z$1szOd^Xp;x8%DT7n_R|c2G;K+*2`Qtt1Tpe}iru{Cn6H$s5w&�qOXph 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 Y!