U o^@sddlZddlmZddlmZmZmZmZmZm Z m Z m Z m Z m Z ddlmZddlmZddlmZmZeddd d d d d gZdeZedeZdZeeZdZeeZedeeeej Z!ddZ"ddZ#GdddeZ$GdddeZ%dS)N) Serialisable) AliasTypedStringFloatIntegerBoolNoneSetSetSequence Descriptor) safe_string) Tokenizer) SHEETRANGE_RE SHEET_TITLEZ Print_AreaZ Print_TitlesZCriteriaZ_FilterDatabaseZExtractZConsolidate_AreaZ Sheet_Title|z^_xlnm\.(?P{0})z-(?P[$]?[a-zA-Z]{1,3}:[$]?[a-zA-Z]{1,3})z(?P[$]?\d+:[$]?\d+)z {0}{1}?,?{2}?cCs2t|j}tdd|D}|d|dfS)zg Extract rows and or columns from print titles so that they can be assigned to a worksheet css0|](}|D]\}}|r||fVqqdSN) groupdictitems).0matchkvrx/private/var/folders/sd/whlwsn6x1_qgglc0mjv25_695qk2gl/T/pip-install-4zq3fp6i/openpyxl/openpyxl/workbook/defined_name.py /s z'_unpack_print_titles..Zrowscols) TITLES_REGEXfinditervaluedictget)defnscannerkwrrr_unpack_print_titles)s r%cCs2g}t|jD]}|d}|r||q|S)z Extract print area cells)rrrgroupappend)r"newmZcoordrrr_unpack_print_area5s   r+c@seZdZdZeZeddZeddZeddZeddZ eddZ e ddZ e ddZe ddZe ddZe ddZe ddZeddZe ddZe ddZeZedZdddZedd Zed d Zed d ZeddZddZ dS) DefinedName definedNameT) allow_none attr_textNcCsd||_||_||_||_||_||_||_||_| |_| |_ | |_ | |_ | |_ ||_ ||_||_dSr)namecomment customMenu descriptionhelp statusBar localSheetIdhiddenfunction vbProcedurexlmfunctionGroupId shortcutKeypublishToServerworkbookParameterr/)selfr0r1r2r3r4r5r6r7r8r9r:r;r<r=r>r/rrr__init__Xs zDefinedName.__init__cCs.td|j}|jd}|jdkr(|jS|jS)N=rZOPERAND)rrrtypesubtype)r?tokparsedrrrrB|s   zDefinedName.typeccsb|jdkr^td|j}|jD]>}|jdkrt|j}|dpJ|d}||dfVqdS)NRANGErAZ notquotedquotedr&)rBrrrrCrrr')r?rDpartr*Z sheetnamerrr destinationss    zDefinedName.destinationscCst|j}|r|dSdS)Nr0)RESERVED_REGEXrr0r')r?r*rrr is_reserveds zDefinedName.is_reservedcCstd|jdk S)Nz ^\[\d+\].*)recompilerrr?rrr is_externalszDefinedName.is_externalccsJ|jD]>}|dkrqt||}|dk r|tkr6d|}|t|fVqdS)Nr/z_xlnm.) __attrs__getattrRESERVEDr )r?keyrrrr__iter__s  zDefinedName.__iter__)NNNNNNNNNNNNNNNN)!__name__ __module__ __qualname__tagnamerr0r1r2r3r4r5rr6rr7r8r9r:r;r<r=r>r r/rrr@propertyrBrIrKrOrTrrrrr,AsX               $    r,c@sxeZdZdZeedZdddZddZdd Z d d Z d d Z ddZ ddZ dddZddZdddZddZdS)DefinedNameListZ definedNames)Z expected_typercCs ||_dSrr-)r?r-rrrr@szDefinedNameList.__init__cCsHg}|jD]2}|jdkr&|jdkr&q n |jdkr2q ||q ||_dS)zJ Strip invalid definitions and remove special hidden ones )z_xlnm.Print_Titlesz_xlnm.Print_AreaNz_xlnm._FilterDatabase)r-r0r6r()r?Z valid_namesnrrr_cleanups   zDefinedNameList._cleanupcCs.|jD]"}|j|jkr|j|jkrdSqdS)zc Check for whether DefinedName with the same name and scope already exists TNr-r0r6)r?r"drrr _duplicates zDefinedNameList._duplicatecCsFt|tstd||r$td|jdd}||||_dS)Nz You can only append DefinedNamesz7DefinedName with the same name and scope already exists) isinstancer, TypeErrorr` ValueErrorr-r()r?r"namesrrrr(s   zDefinedNameList.appendcCs t|jSr)lenr-rNrrr__len__szDefinedNameList.__len__cCs*|jD]}|j|kr|jdkrdSqdS)z6 See if a globaly defined name exists NTr^r?r0r"rrr __contains__s zDefinedNameList.__contains__cCs ||}|std||S)z+ Get globally defined name zNo definition called {0})r!KeyErrorformatrgrrr __getitem__s zDefinedNameList.__getitem__NcCs,|jD] }|j|kr|j|kr|SqdS)zE Get the name assigned to a specicic sheet or global Nr^)r?r0scoper"rrrr!s zDefinedNameList.getcCs||std|dS)z0 Delete a globally defined name zNo globally defined name {0}N)deleterirj)r?r0rrr __delitem__s zDefinedNameList.__delitem__cCs:t|jD]*\}}|j|kr |j|kr |j|=dSq dS)z@ Delete a name assigned to a specific or global TN) enumerater-r0r6)r?r0rlidxr"rrrrmszDefinedNameList.deletecsfdd|jDS)zH Provide a list of all names for a particular worksheet csg|]}|jkr|jqSr)r6r0)rr"rlrr s z.DefinedNameList.localnames..r[)r?rlrrqr localnamesszDefinedNameList.localnames)r)N)N)rUrVrWrXr r,r-r@r]r`r(rfrhrkr!rnrmrsrrrrrZs       rZ)&rLZ!openpyxl.descriptors.serialisablerZopenpyxl.descriptorsrrrrrrr r r r Zopenpyxl.compatr Zopenpyxl.formularZopenpyxl.utils.cellrr frozensetrRjoin_namesrMrjrJZ COL_RANGEZ COL_RANGE_REZ ROW_RANGEZ ROW_RANGE_REVERBOSErr%r+r,rZrrrrs0 0       f