"Vfi#<ddlmZddlmZddlmZmZmZmZddlm Z ddl m Z m Z m Z mZmZmZddlmZddlmZddlmZdd lmZGd d eeZGd d eZGddeZGddeZGddeZGddeZdS))copy) safe_string)get_column_letterget_column_intervalcolumn_index_from_stringrange_boundaries)DEFAULT_COLUMN_WIDTH)IntegerFloatBoolStrictStringAlias) Serialisable)StyleableObject)BoundDictionary)ElementceZdZdZdZeZeZedZ e dZ eZ e dZ d fd Zd Zd Zd ZxZS) Dimensionz)r&__name__dictr"s r'__repr__zDimension.__repr__Bs&O4>*OO$t**OOOOr()TN)r< __module__ __qualname____doc__r+r r!r rrr outline_levelrr%r r/r8r? __classcell__r&s@r'rrsFFJ GIIE TVVF7d+++LE.))MI E*  E<@######...PPPPPPPr(rceZdZdZejdzZedZedZe dZ edZ e Z e Z dfd Zed Zed ZxZS) RowDimensionz2Information about the display properties of a row.)ht customFormat customHeightsthickBotthickTopr!rTrrHrNFc | | }| | }||_| | }| | }||_||_t|||| ||dSN)r%)rHrLrMrr )r"r#r!rHrJrKrIrrrCrr$heightrspansrLrMkwr&s r'r zRowDimension.__init__Rs& =E  B   [F  $(L      +4iq  J J J J Jr(c|jS)z+Always true if there is a style for the row) has_styler>s r'rIzRowDimension.customFormatss ~r(c|jduS)z,Always true if there is a height for the rowN)rHr>s r'rJzRowDimension.customHeightxswd""r()rNNNNFrNFNNNNNN)r<r@rArBrr+rrQrKr rHrPr rLrMr propertyrIrJrDrEs@r'rGrGFs<<%)AAJ gA jA $   B U4[[FtvvHtvvH""# !JJJJJJBX##X#####r(rGc eZdZdZeZeZedZ e Z e dZ e dZeZejdzZdedddd dd d d dd d f fd Zed Zd Zed ZdZxZS)ColumnDimensionz5Information about the display properties of a column.bestFitTr)widthrZ customWidthr%minmaxAFrNc||_| |_| |_| | }||}||_||}||_t |||||| dSrO)r[r]r^rZrrr )r"r#r!r[rZrrrCrr%r]r^r\r$ auto_sizer&s r'r zColumnDimension.__init__s    [F  G  $(L"  .7%  Q Q Q Q Qr(c*t|jS)z.Always true if there is a width for the column)boolr[r>s r'r\zColumnDimension.customWidthsDJr(ct|j|jgs"t|jx|_|_dSdS)z6 Set boundaries for column definition N)allr]r^rr!r>s r'reindexzColumnDimension.reindexsFDHdh'(( G":4:"F"F FDHtxxx G Gr(cXt|jdt|jS)z*Return the range of cells actually covered:)rr]r^r>s r'rangezColumnDimension.ranges-$DH--MM0A$(0K0KMMMr(cpt|}|ddhkr tdi|SdS)Nr]r^col)rk)r=keysr)r"attrss r'to_treezColumnDimension.to_trees@T  ::< ) )**E** * * )r()r<r@rArBr r[r rZrrarr!r r]r^rrr+r r rWr\rfrirnrDrEs@r'rYrY~s=?? EGGEdffGi  I FHHE 'T " " "C 'T " " "CI%)77J +# "QQQQQQ<  X GGGNNXN +++++++r(rYc2eZdZdZd fd Zd dZdZxZS) DimensionHolderz% Allow columns to be grouped r!Ncv||_d|_||_t||dSr*)r# max_outlinedefault_factoryrr )r"r# referencersr&s r'r zDimensionHolder.__init__s:". O44444r(Fc||}t|tr`||}||_||_t ||dd}|D] }||vr||= t t||f\|_|_ dSt|tr6t||dzD]$}|j j |}||_||_#dSdS)aTallow grouping a range of consecutive rows or columns together :param start: first row or column to be grouped (mandatory) :param end: last row or column to be grouped (optional, default to start) :param outline_level: outline level :param hidden: should the group be hidden on workbook open or not Nru) isinstancersrYrCrrmaprr]r^rGrir#row_dimensions) r"startendrCrnew_dim work_sequence column_letterels r'groupzDimensionHolder.groups ;C d**,,o > > (5kG$1G !#GN/s;;ABB?M!. , ,  D((]+'*+CeS\'R'R $GK ,,.. = = (E37++ ( (.7;(5%!'  ( ( ( (r(cjd}td}t}t||D]G}|}|/||j||H|rt||_ t|r|SdS)Nc8||jSr*)rfr])r.s r'sorterz'DimensionHolder.to_tree..sorters MMOOO9 r(cols)r-) rsetsortedvaluesrnaddrappendr^rrlen)r"rroutlinesrkobjs r'rnzDimensionHolder.to_trees   V__55$++--V444  C++--C S-... #  -"8}}D  r77 I  r()r!N)NruF)r<r@rArBr rrnrDrEs@r'rprpsj555555((((6r(rpceZdZdZedZedZeZe dZ e dZ e dZ e dZ edZedZ ddZdS) SheetFormatProperties sheetFormatPrTrNc ||_||_||_||_||_||_||_||_| |_dSr*) baseColWidthdefaultColWidthdefaultRowHeightrJ zeroHeightrM thickBottomoutlineLevelRowoutlineLevelCol) r"rrrrJrrMrrrs r'r zSheetFormatProperties.__init__sP). 0($  &..r() rNrNNNNNN)r<r@rAtagnamer rr rrr rJrrMrrrr r1r(r'rrsG7d+++Let,,,Ouww44(((L&&&Jtt$$$H$$'''Kg...Og...O !%"$" !!%!%//////r(rcFeZdZdZeZ ddZedZdS)SheetDimension dimensionNc||_dSr*)ref)r"rs r'r zSheetDimension.__init__*sr(c*t|jSr*)rrr>s r' boundarieszSheetDimension.boundaries0s)))r(r*) r<r@rArrrr rWrr1r(r'rr$sXG &((C **X***r(rN)ropenpyxl.compatropenpyxl.utilsrrrropenpyxl.utils.unitsr openpyxl.descriptorsr r r r rr!openpyxl.descriptors.serialisableropenpyxl.styles.styleableropenpyxl.utils.bound_dictionaryropenpyxl.xml.functionsrrrGrYrprrr1r(r'rs2'''''' 655555;:::::555555;;;;;;******(P(P(P(P(P(P(P(PV5#5#5#5#5#95#5#5#pB+B+B+B+B+iB+B+B+J:::::o:::z!/!/!/!/!/L!/!/!/H*****\*****r(