B
    \                 @   s  d dl mZmZ d dlZd dlZd dlmZmZ ddlm	Z	m
Z
mZmZmZmZ ddlmZmZ ddlmZmZmZ ddlmZ dd	lT d ZejZdad
ad
add Zdd Z dd Z!i Z"x e#dD ]Z$e$d e"de$ < qW xdD ]Z$d e"e$< qW [$e"d
fddZ%i Z&xe' D ]\Z(Z)e(e&e)< qW dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3e*d  Z4e*d! Z5e*d" Z6e7d#ej8j9d$d% fd&d'Z:d(d) Z;e*d* e*d+ fd,d-Z<d.d/ Z=d0d1 Z>d2d3 Z?d4d5 Z@d6d6e>fd7d8e>fd9d8e>fd:d8e>fd;d8e>fd<d8e>fd=d>e?fd?d?e@fd@dAe@fdBdCe@fdDdEe@fdFdGe?fdHd8e>fdId8e@fdJd8e@fdKdLdMdNdOdPdQdRdSdTdUdVdWfZAdXdY ZBG dZd[ d[eCZDG d\d] d]eDZEG d^d_ d_eDZFG d`da daeDZGG dbdc dceDZHejd d d d d fdddeZIdS )f    )print_functionunicode_literalsN)joinnormpath   )XL_CELL_BLANKXL_CELL_BOOLEANXL_CELL_ERRORXL_CELL_TEXT	XLRDErrorerror_text_from_code)BookName)XFFormatis_date_format_string)Sheet)*Fc             C   s  t d k	rd S dtjkr,dd lm  ma  n ydd lma  W n tk
r*   ydd l	m  ma  W n tk
r$   ydd la W n tk
r   ydd l
ma  W nt tk
r   ydd lm  ma  W nF tk
r   ydd lma  W n tk
r   tdY nX Y nX Y nX Y nX Y nX Y nX tt drjtd}yt | daW n tk
rh   Y nX tt dott jda| rtd	d
 t j D }tt jt j|t|d d S )NZ
IronPythonr   z.Failed to import an ElementTree implementation	iterparse    TElementTreeiterc             S   s.   g | ]&}|  d ddkr|tt|fqS )_ version)lowerreplacegetattrET).0item r!   (lib/python3.7/site-packages/xlrd/xlsx.py
<listcomp>>   s   z/ensure_elementtree_imported.<locals>.<listcomp>)file)r   sysr   Zxml.etree.ElementTreeZetreer   Zdefusedxml.cElementTreeZcElementTreeImportErrorZxml.etree.cElementTreeZ
lxml.etreeZelementtree.ElementTree	ExceptionhasattrZBYTES_IOr   ET_has_iterparseNotImplementedErrorElement_has_iterrepr__dict__keysprint__file____name__)	verbositylogfileZ_dummy_streamZetree_versionr!   r!   r"   ensure_elementtree_imported   sH    
      ,
r4   c             C   s6   |  dd }|dkr.| d | | |d  fS d| fS )N}r      r   )rfind)tagposr!   r!   r"   	split_tagD   s    r:   c             C   s*   x$t |  D ]}| | | || < qW d S )N)listr.   )ZadictZurixr!   r!   r"   augment_keysJ   s    r=      ZABCDEFGHIJKLMNOPQRSTUVWXYZZ	123456789c             C   s   d}d}yxxr| D ]j}|d7 }|| }|r6|d | }q|dkrV|rJd }P qzt d| q|d }d|  krrtk sxn tP qW W n$ tk
r   t d|| f Y nX t| |d  d }||fS )Nr   r   r>   zMissing col in cell name %rz'Unexpected character %r in cell name %r)r'   X12_MAX_COLSAssertionErrorKeyErrorint)	cell_nameletter_valueallow_no_colcolxcharxclvrowxr!   r!   r"   cell_name_to_rowx_colxV   s*    


rL   z;{http://schemas.openxmlformats.org/spreadsheetml/2006/main}zE{http://schemas.openxmlformats.org/officeDocument/2006/relationships}z>{http://schemas.openxmlformats.org/package/2006/relationships}zI{http://schemas.openxmlformats.org/package/2006/metadata/core-properties}z"{http://purl.org/dc/elements/1.1/}z{http://purl.org/dc/terms/}z+{http://www.w3.org/XML/1998/namespace}spacez	
 i   i @  vfisz_x[0-9A-Fa-f]{4,4}_c             C   s   t t| ddd dS )Nr   r6         )ZunichrrC   group)Zmobjr!   r!   r"   <lambda>   s    rS   c             C   s   d| kr||| S | S )Nr   r!   )sZsubberreplr!   r!   r"   unescape   s    
rV   c             C   s6   |j }|d krdS |tdkr*|t}tt|S )Nr   Zpreserve)textgetXML_SPACE_ATTRstripXML_WHITESPACEensure_unicoderV   )selfelemtr!   r!   r"   cooked_text   s    
r`   rr_   c       	      C   s|   g }xl|D ]d}|j }||kr6t| |}|rn|| q
||kr
x.|D ]&}|j |krDt| |}|rD|| qDW q
W d|S )zReturns unescaped unicoder   )r8   r`   appendr   )	r]   r^   r_tagt_tagZaccumchildr8   r_   Ztnoder!   r!   r"   get_text_from_si_or_is   s    




rf   c             C   sN   xH| D ]@\}}}|s"t ||| q|s(q||}||}t ||| qW d S )N)setattrrX   )Zamapr^   objZxml_attrZobj_attrZcnv_func_or_constZ	raw_valueZcooked_valuer!   r!   r"   map_attributes   s     
ri   c             C   s   | d krdS t | S )Nr   )r\   )rT   r!   r!   r"   cnv_ST_Xstring   s     rj   c             C   s    | sd S t | }|dkst|S )Nr   )rC   rA   )rT   valuer!   r!   r"   cnv_xsd_unsignedInt   s
    rl   c             C   s0   | sdS | dkrdS | dkr dS t d|  d S )Nr   )1trueZonr   )0ZfalseZoffz unexpected xsd:boolean value: %r)
ValueError)rT   r!   r!   r"   cnv_xsd_boolean   s    rq   namecommentr   Z
customMenuZdescriptionhelpZ	statusBarZlocalSheetIdscopehiddenZfunctionfuncZvbProcedureZvbasicZxlmZmacroZfunctionGroupIdZ	funcgroupZshortcutKeyZpublishToServerZworkbookParameter)r   Zany_errr   )r   Zany_externalr   )r   Zany_relr   )r   Zbasic_formula_lenr   )r   Zbinaryr   )r   builtinr   )r   complexr   )r   Z	evaluatedr   )r   Zexcel_sheet_indexr   )r   Zexcel_sheet_numr   )r   Zoption_flagsr   )r   resultN)r   stackNc             C   s   i }i }t | j}xt|D ]~}| j| }|j }||jf}||krdd|f }| jrdt|| jd |||< |j||f}	||kr|| 	|	 q|	g||< qW x2|
 D ]&}|| }
|
  dd |
D ||< qW || _|| _d S )Nz(Duplicate entry %r in name_and_scope_map)r$   c             S   s   g | ]}|d  qS )r6   r!   )r   r<   r!   r!   r"   r#      s    z)make_name_access_maps.<locals>.<listcomp>)lenname_obj_listxrangerr   r   ru   r2   r/   r3   rb   r.   sortname_and_scope_mapname_map)bkr   r   Z	num_namesZnamexnobjZ
name_lcasekeymsgZ	sort_dataZalistr!   r!   r"   make_name_access_maps   s,    




r   c               @   s.   e Zd Zd
ddZdd Zdd Zdd	 ZdS )
X12GeneralNc             C   s   | j dkr |d k	r t| jd| t|| _| jj}xLtrD| j	 n| j
 D ]0}| j dkrf| | ||j}|rN|| | qNW |   d S )Nr6   z
=== %s ===
   )r2   fprintfr3   r   parsetreetag2methrX   r+   r   getiterator	dump_elemr8   
finish_off)r]   streamheadingZ	getmethodr^   methr!   r!   r"   process_stream  s    


zX12General.process_streamc             C   s   d S )Nr!   )r]   r!   r!   r"   r     s    zX12General.finish_offc             C   s.   t | jdt|jd t||j|j|j d S )Nz,===
tag=%r len=%d attrib=%r text=%r tail=%r
r   )r   r3   r:   r8   r|   ZattribrW   tail)r]   r^   r!   r!   r"   r     s    zX12General.dump_elemc             G   s    d| d | }| j | d S )Nz            
)r3   write)r]   ZfmtZvargsrW   r!   r!   r"   dumpout  s    zX12General.dumpout)N)r1   
__module____qualname__r   r   r   r   r!   r!   r!   r"   r     s   
r   c            	   @   s   e Zd ZedfddZed defed defed defed defiZ	d	d
 Z
edd Zdd Zdd Zdd Zdd Zdd ZeeedZeee dS )X12BookFc             C   s>   || _ || _|| _d| j _i | j _i | _i | _g | _g | _d S )Nr   )	r   r3   r2   nsheetsprops
relid2pathrelid2reltypesheet_targetssheetIds)r]   r   r3   r2   r!   r!   r"   __init__   s    zX12Book.__init__ZlastModifiedBylast_modified_bycreatorZmodifiedZcreatedc       	      C   s   | j dkrt| jd t|| _| jj}i }x\tr>| j	 n| j
 D ]@}| j dkr`| | ||j}|rH|\}}||j}|||< qHW |dp|d| j_|| j_| j dkrt| jd| |   d S )Nr6   z
=== coreProps ===
r   r   r   z
props: %r
)r2   r   r3   r   r   r   core_props_menurX   r+   r   r   r   r8   rW   r   Z	user_namer   r   )	r]   r   Zgetmenur   r^   Zmenuattrrw   rk   r!   r!   r"   process_coreprops2  s$    





zX12Book.process_corepropsc             C   s   |  dd S )N\/)r   r   )rr   r!   r!   r"   convert_filenameF  s    zX12Book.convert_filenamec             C   s   | j dkrt| jd t|}td }x||D ]}|d}t	|d}|d
dd }| j dkr| d	||| || j|< |dr|d
d  | j|< q4d| | j|< q4W d S )Nr6   z
=== Relationships ===
RelationshipIdTargetTyper   r?   zId=%r Type=%r Target=%rr   zxl/)r2   r   r3   r   r   U_PKGRELfindallrX   r   r   splitr   r   
startswithr   )r]   r   r   rc   r^   ridtargetreltyper!   r!   r"   process_relsJ  s    





zX12Book.process_relsc             C   s   dr| j dkr| | t }| j}||_t|j|_|j| |d|_	d |_
t| ||_tt|| |jd kr|d|_|j	drd|_| j dkr|jdd	 d S )
Nr   r   rr   r?   z_xlnm.r   r6   z=== Name object ===)header)r2   r   r   r   r|   r}   Z
name_indexrb   rX   rr   Zraw_formular`   Zformula_textri   _defined_name_attribute_mapru   r   rx   dump)r]   r^   r   r   r!   r!   r"   do_defined_name\  s"    


zX12Book.do_defined_namec             C   s&   x|D ]}|  | qW t| j d S )N)r   r   r   )r]   r^   re   r!   r!   r"   do_defined_namesp  s    
zX12Book.do_defined_namesc             C   s  | j }|j}|td }t|d}tt|d}| j| }| j| }| j	dkrl| 
d||||| |dkr| j	dkr| 
d|| d S |d}	d	d	d
dd}
|j|
|	  t|d ||d}t|_t|_|j| |j| | jd
7  _| j| | j| d S )NidsheetIdrr   r6   z+sheetx=%d sheetId=%r rid=%r type=%r name=%rZ	worksheetz#Ignoring sheet of type %r (name=%r)stater   r   )NZvisiblerv   Z
veryHidden)Zpositionrr   Znumber)r   r   rX   U_ODRELrC   rV   r\   r   r   r2   r   Z_sheet_visibilityrb   r   X12_MAX_ROWSZutter_max_rowsr@   Zutter_max_cols_sheet_listZ_sheet_namesr   r   )r]   r^   r   sheetxr   r   rr   r   r   r   Zvisibility_mapsheetr!   r!   r"   do_sheetu  s:    




zX12Book.do_sheetc             C   s0   t |d}| jdkr$| d| || j_d S )NZdate1904r6   zdatemode=%r)rq   rX   r2   r   r   datemode)r]   r^   r   r!   r!   r"   do_workbookpr  s    
zX12Book.do_workbookpr)ZdefinedNamesZ
workbookPrr   N)r1   r   r   DLFr   U_CPrj   U_DC	U_DCTERMSr   r   staticmethodr   r   r   r   r   r   r   r=   U_SSML12r!   r!   r!   r"   r     s    #r   c               @   s.   e Zd ZedfddZd	ddZd
ddZdS )X12SSTr   c             C   s,   || _ || _|| _tr | j| _n| j| _d S )N)r   r3   r2   r)   process_stream_iterparser   process_stream_findall)r]   r   r3   r2   r!   r!   r"   r     s    
zX12SST.__init__Nc             C   s   | j dkr |d k	r t| jd| td }d}| jj}xht|D ]Z\}}|j|krTq@|d }| j dkr~t| jd| | 	| t
| |}|| |  q@W | j dkr| dt| | j dkrx$t|D ]\}	}
t| jd	|	|
 qW d S )
Nr6   z
=== %s ===
sir?   r   r   zelement #%d
zEntries in SST: %dzSST x=%d s=%r
)r2   r   r3   r   r   _sharedstringsr   r   r8   r   rf   rb   clearr   r|   	enumerate)r]   r   r   si_tagelemnossteventr^   rz   r<   rT   r!   r!   r"   r     s(    
 





zX12SST.process_stream_iterparsec             C   s   | j dkr |d k	r t| jd| t|| _td }d}| jj}xR| j	|D ]B}|d }| j dkr|t| jd| | 
| t| |}|| qNW | j dkr| dt| d S )	Nr6   z
=== %s ===
r   r?   r   r   zelement #%d
zEntries in SST: %d)r2   r   r3   r   r   r   r   r   r   r   r   rf   rb   r   r|   )r]   r   r   r   r   r   r^   rz   r!   r!   r"   r     s    



zX12SST.process_stream_findall)N)N)r1   r   r   r   r   r   r   r!   r!   r!   r"   r     s   	
r   c               @   sR   e Zd ZedfddZdd Zdd Zdd	 Zd
d ZeeeedZ	e
e	e dS )	X12Stylesr   c             C   sh   || _ || _|| _ddg| _d | _i | _x.ttddttdd D ]}d| j|< qFW d| j jd< d S )Nr         -   0   r   r6   )	r   r3   r2   	xf_countsxf_typefmt_is_dater;   range_xf_index_to_xl_type_map)r]   r   r3   r2   r<   r!   r!   r"   r     s    
"zX12Styles.__init__c             C   s
   d| _ d S )Nr   )r   )r]   r^   r!   r!   r"   do_cellstylexfs  s    zX12Styles.do_cellstylexfsc             C   s
   d| _ d S )Nr   )r   )r]   r^   r!   r!   r"   
do_cellxfs  s    zX12Styles.do_cellxfsc             C   sl   t |d}t|d}t| j|}|| j|< t||d |}|| jj|< | jdkrh| 	d||| d S )N
formatCodenumFmtIdr6   r   z$numFmtId=%d formatCode=%r is_date=%d)
r\   rX   rC   r   r   r   r   
format_mapr2   r   )r]   r^   r   r   is_dateZfmt_objr!   r!   r"   	do_numfmt  s    

zX12Styles.do_numfmtc             C   s   | j dkrd S | j| j  }|d | j| j < t }| jj| | j jd7  _t|dd}||_	| j
|d}|d | jj|< | jdkr| d|| | t| jj d S )Nr   r   ro   r   r6   r   zxfx=%d numFmtId=%d)r   r   r   r   Zxf_listrb   ZxfcountrC   rX   Z
format_keyr   r   r2   r   r,   )r]   r^   Zxfxxfr   r   r!   r!   r"   do_xf  s    

zX12Styles.do_xf)ZcellStyleXfsZcellXfsZnumFmtr   N)r1   r   r   r   r   r   r   r   r   r   r=   r   r!   r!   r!   r"   r     s   
r   c               @   s^   e Zd ZedfddZdddZdd Zd	d
 Zdd Zdd Z	dd Z
de
iZeee dS )X12Sheetr   c             C   sZ   || _ || _|| _d| _|j| _| jj| _i | _i | _	|j
| _
d| _d| _trV| j| _d S )Nr?   r   )r   r3   r2   rK   bookr   r   r   r   r   merged_cellswarned_no_cell_namewarned_no_row_numr)   own_process_streamr   )r]   r   r3   r2   r!   r!   r"   r     s    
zX12Sheet.__init__Nc             C   s   | j dkr |d k	r t| jd| td }| j}xdt|D ]V\}}|j|kr^|| |  q:|jtd krx| 	| q:|jtd kr:| 
| q:W |   d S )Nr6   z
=== %s ===
rowZ	dimensionZ	mergeCell)r2   r   r3   r   do_rowr   r   r8   r   do_dimensiondo_merge_cellr   )r]   r   r   Zrow_tagZself_do_rowr   r^   r!   r!   r"   r     s    

zX12Sheet.own_process_streamc             C   s   | j dkrt| jd t|}td }xr||D ]d}|d}|d}|ddd }| j dkrz| 	d	||| || j
|< ttd
|| j|< q4W d S )Nr6   z
=== Sheet Relationships ===
r   r   r   r   r   r?   zId=%r Type=%r Target=%rzxl/worksheets)r2   r   r3   r   r   r   r   rX   r   r   r   r   r   r   )r]   r   r   rc   r^   r   r   r   r!   r!   r"   r   .  s    





zX12Sheet.process_relsc             C   s:  t | }|d }|jtd ks(tdd |D }|d }|jtd ksPt| jj}ddlm} td }td	 }	td
 }
x|	td D ]}|	d| d |
 }||	d| d |	 d |
 7 }|
d}| }|t|
d |_t| \|_|_}d|_x"|D ]}| jt| |7  _qW |||< qW d S )Nr   authorsc             S   s   g | ]
}|j qS r!   )rW   )r   r^   r!   r!   r"   r#   @  s    z4X12Sheet.process_comments_stream.<locals>.<listcomp>r   ZcommentList)NoterW   ra   r_   rs   z./r   refZauthorIdr   )r   r   Zgetrootr8   r   rA   r   cell_note_mapr   r   rX   rC   ZauthorrL   rK   rG   rW   r`   )r]   r   rootZauthor_listr   Zcomment_listr   r   Ztext_tagrc   rd   r^   Ztsr   ZnoteZcoordsr_   r!   r!   r"   process_comments_stream<  s,    "

z X12Sheet.process_comments_streamc             C   sP   | d}|rL|dd }t|dd\}}|d | j_|d k	rL|d | j_d S )Nr   :r?   T)rF   r   )rX   r   rL   r   Z	_dimnrowsZ	_dimncols)r]   r^   r   last_cell_refrK   rG   r!   r!   r"   r   T  s    
zX12Sheet.do_dimensionc       	      C   sv   | d}|rry|d\}}W n tk
r<   |}|}Y nX t|\}}t|\}}| j||d ||d f d S )Nr   r   r   )rX   r   rp   rL   r   rb   )	r]   r^   r   Zfirst_cell_refr   Z
first_rowxZ
first_colxZ	last_rowxZ	last_colxr!   r!   r"   r   _  s    

zX12Sheet.do_merge_cellc          	      s   fdd}| d}|d krV|  jd7  _d}| jrh| jsh| d| j d| _nt|d | _d}d| j  kr~tk sn t| jd| jdkr| d	|| j| t}x|D ]}| d}|d krd7 | jr| j	s| d
 d| _	ndd}ynxh|D ]`}	|d7 }|	dkr"q||	 }
|
r>d |
 n(d d  kr^t
k sdn tP qW W n& tk
r   td|	|f Y nX |r||d  |krtd||f t| dd}| dd d } dkrhx>|D ]6}|j}|tkr
|j}n|tkrntd| qW |sN| jjrf| jtd| n| jd t|| q dkrx:|D ]2}|j}|tkr|j}n|tkrn|| qxW |s| jjr| jtd| n"| jt| }| jt|| q dkrXx>|D ]6}|j}|tkr(t| |}n|tkr4n|| qW | jt|| q dkrx:|D ]2}|j}|tkr|j}n|tkrn|| qhW | jtt|| q dkr d}x:|D ]2}|j}|tkr|j}n|tkrn|| qW t| }| jt|| q dkrxP|D ]H}|j}|tkrPt| |}n&|tkrb|j}n|tkrnn|| q0W |s| jjr| jtd| n| jt|| qtd f qW d S )Nc                s   t d | f d S )Nz9cell type %s has unexpected child <%s> at rowx=%r colx=%r)r'   )	child_tag)	cell_typerG   rK   r!   r"   bad_child_tagp  s    z&X12Sheet.do_row.<locals>.bad_child_tagra   r   r   zno row number; assuming rowx=%dr?   r   z'<row> row_number=%r rowx=%d explicit=%dz%no cellname; assuming rowx=%d colx=%d$r>   z'Unexpected character %r in cell name %rz!cell name %r but row number is %rrT   ro   r_   nzunexpected tag %rr   strbez#N/AZ	inlineStrz'Unknown cell type %r in rowx=%d colx=%d) rX   rK   r2   r   r   rC   r   rA   _UPPERCASE_1_REL_INDEXr   r@   rB   r'   r8   V_TAGrW   F_TAGr   formatting_infor   Zput_cellr   floatr   r
   r`   r   rq   error_code_from_textr	   IS_TAGrf   )r]   Zrow_elemr   Z
row_numberZexplicit_row_numberrE   Z	cell_elemrD   rH   rI   rJ   Zxf_indexZtvaluere   r   rk   r!   )r   rG   rK   r"   r   n  s    
































zX12Sheet.do_rowr   )N)r1   r   r   r   r   r   r   r   r   r   r   r   r=   r   r!   r!   r!   r"   r     s   
 r   c             C   s"  t || t }||_||_||_|r.tdd|_||_|rV|rPtd|jd d|_||_	t
|||}	| |d }
|	|
 ~
| |d }
|	|
d ~
d}||kr| || }
|	|
 t|||}d	|kr| |d	 }
||
d
 ~
n d}t|||}||kr*| || }
||
d ~
xt|jD ]}|	j| }| || }
|j| }t|||}d|j||f }||
| ~
d|ddd  }||kr| |}|| ~xT|j D ]F\}}|dkr|j|}|r||kr| |}|| ~qW |  q6W |S )Nz(formatting_info=True not yet implementedFzEWARNING *** on_demand=True not yet implemented; falling back to False)r$   zxl/_rels/workbook.xml.relszxl/workbook.xmlZWorkbookzdocprops/core.xmlzxl/styles.xmlZstyleszxl/sharedstrings.xmlZSSTzSheet %r (sheetx=%d) from %rzxl/worksheets/_rels/%s.relsr   r   r?   Zcomments)r4   r   r3   r2   r  r*   use_mmap	on_demandr/   ragged_rowsr   openr   r   r   r   r   r   r   r   r   r   rr   rsplitr   itemsr   rX   r   Ztidy_dimensions)ZzfZcomponent_namesr3   r2   r  r  r  r  r   Zx12bookZzfloZ
props_nameZx12styZ	sst_fnameZx12sstr   fnamer   Zx12sheetr   Z
rels_fnameZzfrelsZrelidr   Zcomments_fnameZcomments_streamr!   r!   r"   open_workbook_2007_xml  st    











r  )JZ
__future__r   r   rer%   os.pathr   r   Zbiffhr   r   r	   r
   r   r   r   r   r   Z
formattingr   r   r   r   r   ZtimemachineDEBUGstdoutr   r   r)   r+   r4   r:   r=   r  r~   Z_xrL   r	  r  _codeZ_textr   r   r   r   r   r   rY   r[   r   r@   r  r  r
  compileUNICODEsubrV   r`   rf   ri   rj   rl   rq   r   r   objectr   r   r   r   r   r  r!   r!   r!   r"   <module>   s    &

 18  