"VfiddlmZddlmZddlmZddlmZddlm Z m Z m Z m Z m Z mZmZddlmZddlmZmZmZdd Zd Zd d lmZGd deZGddeZdS)) defaultdictchain) itemgetter) Serialisable)BoolNoneSetStringSequenceAliasInteger Convertible) NestedText)rows_from_rangecoordinate_to_tupleget_column_letterc t|}d|D}tt}t|tdD] \}}|||!|D]r\}}t |}d}t|dkrd}||t||t|}||sd |S)ax Collapse a collection of cell co-ordinates down into an optimal range or collection of ranges. E.g. Cells A1, A2, A3, B1, B2 and B3 should have the data-validation object applied, attempt to collapse down to a single range, A1:B3. Currently only collapsing contiguous vertical ranges (i.e. above example results in A1:A3 B1:B3). c34K|]}t|VdSN)r).0cells Pc:\PYTHON\DbComparer\venv\Lib\site-packages\openpyxl/worksheet/datavalidation.py z*collapse_cell_addresses..(s+>>%d++>>>>>>)keyz {0}{1}:{2}{3}z{0}{1} ) listrsortedrappenditemsrlenformatminmaxjoin) cells input_rangesranges raw_coordsgrouped_coordsrowcolfmtrs rcollapse_cell_addressesr1s,  F?>>>>J!&&N::a==999((Ss""3''''%**,, U$$ u::??C JJsCJJSZZ 8 8 a 88F  rcd|D}d|D}tt|S)z Expand cell ranges to a sequence of addresses. Reverse of collapse_cell_addresses Eg. converts "A1:A2 B1:B2" to (A1, A2, B1, B2) c34K|]}t|VdSr)r)rrss rrz%expand_cell_ranges..Bs* ? ?BOB   ? ? ? ? ? ?rc3(K|] }t|VdSrr)rr-s rrz%expand_cell_ranges..Cs& ) )SUC[ ) ) ) ) ) )r)splitsetr) range_stringrowsr(s rexpand_cell_rangesr:;sI @ ?,*<*<*>*> ? ? ?D ) )D ) ) )E ue}  rr)MultiCellRangec eZdZdZeeZedZedZ e dZ edZ e dZ e dZe dZedZedZedZedZedZedeZedeZed Zed Zed Zed ZedZ ddZ dZ!dZ"dS)DataValidationdataValidation expected_typesqrefT allow_none showDropDown allowBlank)rCr@)wholedecimalrdatetime textLengthcustom)values)stopwarning information) noControloffondisabledhiragana fullKatakana halfKatakana fullAlpha halfAlpha fullHangul halfHangul)between notBetweenequalnotEquallessThanlessThanOrEqual greaterThangreaterThanOrEqualtypeNFrc||_||_||_||_||_||_||}||_||_||_||_ | |_ | |_ | |_ | |_ | |_dSr)rArDimeModeoperatorformula1formula2rEshowErrorMessageshowInputMessagerc promptTitle errorStyleerrorprompt errorTitle)selfrcrgrhrirjrDrErArkrlrmrnrorerf allow_blanks r__init__zDataValidation.__init__js$ (        "$J$ 0 0 &$  $rcTt|dr|j}|xj|z c_dS)z0Adds a cell or cell coordinate to this validator coordinateNhasattrrtrArprs raddzDataValidation.adds/ 4 & & #?D d rcBt|dr|j}||jvS)Nrtrurws r __contains__zDataValidation.__contains__s( 4 & & #?Dtz!!r)NNNFFFFrNNNNNNNN)#__name__ __module__ __qualname__tagnamerr;rAr r(r*rrDhide_drop_downrjrirErqr rormrkrnrstrrgrhr rcrlrerfvalidation_typerrrxrzrrrr=r=JsG Kn 5 5 5E E'NNE U7^^F44(((LU>**Ntt,,,tt,,,&&&J% %%KT***J F % % %E&d+++K V & & &FzT===HzT===H 73 4 4 4D BCCCJg:;;;GwcdddHeFmmO"'"'#!!  !!"%"%"%"%J"""""rr=ceZdZdZedZedZedZe e Z dZ dZ dd Zed Zd Zd Zdfd ZxZS)DataValidationListdataValidationsTrBr?)r>)disablePromptsxWindowyWindowcountNrc>||_||_||_||_dSr)rrrr>)rprrrrr>s rrrzDataValidationList.__init__s(-  ,rc t|Sr)r#rps rrzDataValidationList.counts4yyrc*t|jSr)r#r>rs r__len__zDataValidationList.__len__s4&'''rc:|j|dSr)r>r!)rpdvs rr!zDataValidationList.appends ""2&&&&&rc|j}d|jD|_t|}||_|S)zC Need to skip validations that have no cell ranges c:g|]}t|j|Sr)boolrA)rr0s r z.DataValidationList.to_tree..s%OOOQagOqOOOr)r>superto_tree)rpr~r*xml __class__s rrzDataValidationList.to_treesH$OO$*=OOOggoog&&$ r)NNNNrr)r{r|r}r~rrr rrr r=r> __elements__ __attrs__rrpropertyrrr!r __classcell__)rs@rrrsGTT***Ng&&&Gg&&&GXN;;;N&LAI!% " - - - -X((('''rrN)r) collectionsr itertoolsrrfr!openpyxl.descriptors.serialisableropenpyxl.descriptorsrr r r r r ropenpyxl.descriptors.nestedropenpyxl.utilsrrrr1r: cell_ranger;r=rrrrrs$#####::::::322222B   '&&&&&O"O"O"O"O"\O"O"O"d..........r