
^Q\&                 @   sV  d  d l  m Z d  d l m Z m Z m Z d  d l m Z d  d l m	 Z	 d  d l
 Z d  d l Z d  d l m Z m Z d  d l m Z y d d	 l m Z Wn e k
 r d
 Z Yn Xd  d l m Z d  d l m Z m Z m Z m Z m Z m Z m Z m Z m  Z  m! Z! m" Z" m# Z# d  d l$ m% Z% d  d l& m' Z' d d l( m) Z) d  d l* m+ Z+ d  d l, m- Z- d  d l. m/ Z/ m0 Z0 d  d l1 m2 Z2 d  d l3 m4 Z4 m5 Z5 d  d l6 m7 Z7 d  d l8 m9 Z9 d  d l: m; Z; d  d l< m= Z= d  d l> m? Z? d d l@ mA ZA d ZB d* ZC d! d"   ZD d# d$   ZE d% d&   ZF d
 e d
 d
 d' d( d)  ZG d S)+    )absolute_import)ZipFileZIP_DEFLATED
BadZipfile)exc_info)BytesION)unicodefile)TableDefinition   )KEEP_VBAF)InvalidFileException)ARC_SHARED_STRINGSARC_COREARC_CONTENT_TYPESARC_WORKBOOK	ARC_THEMECOMMENTS_NSSHARED_STRINGSEXTERNAL_LINKXLTMXLTXXLSMXLSX)CommentSheet)Workbook   )read_string_table)apply_stylesheet)DocumentProperties)ManifestOverride)WorkbookParser)get_dependentsget_rels_path)ReadOnlyWorksheet)Table)SpreadsheetDrawing)find_charts)
fromstring)WorkSheetParsers   PK.xlsx.xlsm.xltx.xltmc             C   s   | r |  n t  |  d  } | j   } | j t  } | d k rz t |  } | j | d  | j   | j d  | S| j d  | S)z trims trailing data from the central directory
    code taken from http://stackoverflow.com/a/7457686/570216, courtesy of Uri Cohen
    zrb+r      )openreadfindCENTRAL_DIRECTORY_SIGNATUREr   seektruncate)ZzipFileZis_file_instancefdatapossio r:   J/var/www/dbchiro/venv/lib/python3.4/site-packages/openpyxl/reader/excel.pyrepair_central_directoryD   s    
r<   c             C   s%  t  |  d  } | r t j j |   r t j j |   d j   } | t k r | d k re d } n. | d k rz d } n d | d j t  f } t |   q n  | r t	 |  d	 d
  d
 k	 r t
 d   q n  y t |  d t  } Wn3 t k
 r t |  |  } t | d t  } Yn X| S)z+
    Check the file is a valid zipfile
    r1   r   z.xlszopenpyxl does not support the old .xls file format, please use xlrd to read this file, or convert it to the more recent .xlsx file format.z.xlsbz|openpyxl does not support binary format .xlsb, please convert this file to .xlsx format if you want to open it with openpyxlzropenpyxl does not support %s file format, please check you can open it with Excel first. Supported formats are: %s,encodingNz)File-object must be opened in binary moder)hasattrospathisfilesplitextlowerSUPPORTED_FORMATSjoinr   getattrIOErrorr   r   r   r<   )filenameZis_file_likeZfile_formatmsgarchiver6   r:   r:   r;   _validate_archiveX   s*    		rN   c             C   s   t  t t t g } x' | D] } |  j |  } | r | Sq Wt d d   |  j D  } | t |  @} | r t d t | j	    St
 d   d  S)Nc             s   s   |  ] } | j  Vq d  S)N)ContentType).0pr:   r:   r;   	<genexpr>   s    z&_find_workbook_part.<locals>.<genexpr>/z$File contains no valid workbook part)r   r   r   r   r2   setZDefaultr!   r   poprJ   )packageZworkbook_typesctpartdefaultsZworkbook_typer:   r:   r;   _find_workbook_part   s    rZ   Tc       )      C   s  t  |   } | } | j t  } t |  } t j |  }	 t |	  }
 t | |
 j d d   } | j	 } | | _
 | | _ | | _ | | _ |
 j t t f k | _ | j   g  | _ | r | r t j d  n  | j   } | r8t t   d t  | _ x3 | j   D]" } | j j | | j |   qWn  | rPt |   | _ n  t | k rt | j t   } t j |  | _ n  g  } |	 j  t!  } | d k	 r| j d d  } t" | j |   } n  t# | k r| j t#  | _$ n  t% | |  | j& } x| j'   D]\ } } | j( } | j) } t* |  } g  } | | k rdt+ | |  } n  | | k rvqn  | rt, | | | d |  } | j j- |  n| j. |  } | j/ |  } | | _0 t1 | | |  } | j   | rxe | j  t2  D]T } | j | j)  } t3 j t |   } x$ | j4 D] \ } } | | | _5 q7Wq W| j d k	 r| j6 d k	 r| | j6 j) | _6 n  xH | j7 D]= }  | j |   } t |  }! t8 j |!  }" | j9 |"  qW| j  t: j;  }# x> |# D]6 } x- t< | | j)  D] }$ | j= |$ |$ j>  q	WqW| j  t? j@  }% xa |% D]V } | jA }& | j |&  } t |  }' t? j |'  }( | |( jB |( _C | jD |(  qCWn  | jE | _F g  | _0 qW| jG   | jH   | S)a#  Open the given filename and return the workbook

    :param filename: the path to open or a file-like object
    :type filename: string or a file-like object open in binary mode c.f., :class:`zipfile.ZipFile`

    :param read_only: optimised for reading, content cannot be edited
    :type read_only: bool

    :param keep_vba: preseve vba content (this does NOT mean you can use it)
    :type keep_vba: bool

    :param guess_types: guess cell content type and do not read it from the file
    :type guess_types: bool

    :param data_only: controls whether cells with formulae have either the formula (default) or the value stored the last time Excel read the sheet
    :type data_only: bool

    :param keep_links: whether links to external workbooks should be preserved. The default is True
    :type keep_links: bool

    :rtype: :class:`openpyxl.workbook.Workbook`

    .. note::

        When using lazy load, all worksheets will be :class:`openpyxl.worksheet.iter_worksheet.IterableWorksheet`
        and the returned workbook will be read-only.

    r   Nz5Data types are not guessed when using iterator readera)IrN   r1   r   r)   r    Z	from_treerZ   r"   ZPartNamewbZ
_data_onlyZ
_read_onlyZ_keep_linksguess_typesrO   r   r   templateparseZ_sheetswarningswarnnamelistr   r   r   Zvba_archivewritestrZ_archiver   r   Z
propertiesr2   r   r   r   Zloaded_themer   pivot_cachesZfind_sheetsnametargetr$   r#   r%   appendr0   Zcreate_sheetZ_relsr*   r   r   ZcommentscommentZlegacy_drawingZtablesr&   Z	add_tabler'   Z	_rel_typer(   Z	add_chartanchorr
   Zrel_typeZTargetZcacheIdcacheZ	add_pivotstateZsheet_stateZassign_namesclose))rK   Z	read_onlyZkeep_vbaZ	data_onlyr]   Z
keep_linksrM   srcrootrV   Zwb_partparserr\   Zvalid_filesre   Zshared_stringsrW   Zstrings_pathrd   ZsheetrelZ
sheet_nameZworksheet_pathZ	rels_pathZrelswsZfhZ	ws_parserr?   Zcomment_sheetrefrh   tZxmltableZdrawingscZ	pivot_relZ
pivot_pathtreeZpivotr:   r:   r;   load_workbook   s    					
	#					
	

rw   )r+   r,   r-   r.   )H
__future__r   zipfiler   r   r   sysr   ior   os.pathrB   r`   Zopenpyxl.compatr   r	   Zopenpyxl.pivot.tabler
   Ztestsr   ImportErrorZopenpyxl.utils.exceptionsr   Zopenpyxl.xml.constantsr   r   r   r   r   r   r   r   r   r   r   r   Zopenpyxl.comments.comment_sheetr   Zopenpyxl.workbookr   stringsr   Zopenpyxl.styles.stylesheetr   Zopenpyxl.packaging.corer   Zopenpyxl.packaging.manifestr    r!   Zopenpyxl.packaging.workbookr"   Zopenpyxl.packaging.relationshipr#   r$   Zopenpyxl.worksheet.read_onlyr%   Zopenpyxl.worksheet.tabler&   Z$openpyxl.drawing.spreadsheet_drawingr'   Zopenpyxl.chart.readerr(   Zopenpyxl.xml.functionsr)   Z	worksheetr*   r3   rG   r<   rN   rZ   rw   r:   r:   r:   r;   <module>   sD   R(