
mR\                 @   s  d  d l  m Z d  d l Z d  d l m Z d  d l Z d  d l Z d d   Z d  e j d d  Z	 d  e j d d	  Z
 d  e j d
 d  Z d d   Z d  e j d d  Z e d k rd d   Z e e j  d k r e   e j d   n  e j d Z e j d Z e j d Z e e j d  Z xz e j e  D]f Z e j e  Z e d k rre	 e e e  q>e d k re
 e e e  q>e e e e e  q>Wn  d S)    )print_functionN)REPRc             C   sk   d | k o |  j  k  n r= d | t |  j   |  f S| d k rM d S| d	 k r] d Sd t |  S)
Nr   zsheet #%d (%r)   Global   z	Macro/VBAzUnknown scope value (%r))Znsheetsr   sheet_names)bookscope r   A/var/www/dbchiro/venv/build/xlrd/xlrd/examples/xlrdnameAPIdemo.pyscope_as_string   s    r   c             C   s   y t  |  } WnV t k
 rh | d k r5 d  } n/ |  j   j |  } t d | | f d | Yn XxB |  j D]7 } | d  k s | j | k rs t |  | | |  qs qs Wd  S)N*z%r => %dfile)int
ValueErrorr	   indexprintZname_obj_listr   show_name_object)r
   
scope_strgshow_contentsfZqscopenobjr   r   r   do_scope_query   s    	r   c             C   sd   | j    } |  j j |  } | s< t d | d | d Sx! | D] } t |  | | |  qC Wd S)z
    book -- Book object obtained from xlrd.open_workbook().
    name -- The name that's being investigated.
    show_contents -- 0: Don't; 1: Non-empty cells only; 2: All cells
    f -- Open output file handle.
    z%r: unknown namer   N)lowerZname_mapgetr   r   )r
   namer   r   
name_lcaseZ	nobj_listr   r   r   r   show_name_details(   s    r   c             C   s   y t  |  } WnA t k
 rS |  j   j |  } t d | | f d | Yn X| j   } x\ |  j j | | f  } | r Pn  t d t |  | f d | | d k r d  Sd } qc Wt d t |  | f d | t	 |  | | |  d  S)Nz%r => %dr   zName %s not found in scope %dr   zName %s found in scope %dr   r   )
r   r   r	   r   r   r   Zname_and_scope_mapr   r   r   )r
   r   r   r   r   r   r   r   r   r   r   show_name_details_in_scope7   s      
 r    c             C   s   |  t  j k rl y t  j | |  } Wq t  j k
 rh } z d t |  j | f } WYd  d  } ~ Xq Xn1 |  t  j k r t  j j | d |  } n | } | S)Nz%s:%sz<Unknown error code 0x%02x>)	xlrdZXL_CELL_DATEZxldate_as_tupleZXLDateErrortype__name__ZXL_CELL_ERRORZerror_text_from_coder   )ZcelltypeZ	cellvaluedatemodeZshowvaler   r   r   showable_cell_valueL   s    /	r&   c             C   s  t  d t | j  t | j  t |  | j  f d | | j } t  d t |  d | | d  k rn d  S| j } | j } | d k r n0| t j	 k r xt
 t |   D]H } | | } t  d | t | j  t t j |  |   f d | q Wn| t j k rxt
 t |   D]} | | } t  d | t | j  t t j |  |   f d | | svq"n  |  j }	 x6t
 | j | j  D]}
 |  j |
  } t  d |
 | j f d | t | j | j  } t | j | j  } x t
 | j |  D] } x t
 | j |  D] } | j | |  } | t j k rV| d k rVqn  | j | |  } t | | |	  } t  d | | t j | |  t |  f d | qWqWqWq"Wn  d  S)	Nz
Name: %s, scope: %s (%s)r   zFormula eval result: %sr   zRange %d: %s ==> %sz   Sheet #%d (%s)r   z      (%3d,%3d) %-5s: %s) r   r   r   r   r   resultkindvaluer!   ZoRELrangelenZcoordsZrangename3drelZoREFZrangename3dr$   ZshtxloZshtxhiZsheet_by_indexminZrowxhiZnrowsZcolxhiZncolsZrowxloZcolxloZ	cell_typeZXL_CELL_EMPTYZ
cell_valuer&   Zcellname)r
   r   r   r   resr(   r)   iZref3dr$   ZshxshZrowlimZcollimZrowxZcolxZctycvalZsvalr   r   r   r   Y   sF    5			
?
8	r   __main__c              C   s   d }  t  j j |   d  S)Na  
usage: xlrdnameAIPdemo.py glob_pattern name scope show_contents

where:
    "glob_pattern" designates a set of files
    "name" is a name or '*' (all names)
    "scope" is -1 (global) or a sheet number
        or a sheet name or * (all scopes)
    "show_contents" is one of 0 (no show),
       1 (only non-empty cells), or 2 (all cells)

Examples (script name and glob_pattern arg omitted for brevity)
    [Searching through book.name_obj_list]
    * * 0 lists all names
    * * 1 lists all names, showing referenced non-empty cells
    * 1 0 lists all names local to the 2nd sheet
    * Northern 0 lists all names local to the 'Northern' sheet
    * -1 0 lists all names with global scope
    [Initial direct access through book.name_map]
    Sales * 0 lists all occurrences of "Sales" in any scope
    [Direct access through book.name_and_scope_map]
    Revenue -1 0 checks if "Revenue" exists in global scope

)sysstdoutwrite)textr   r   r   usage   s    r6      r   r         r   )
__future__r   r!   Zxlrd.timemachiner   r2   globr   r3   r   r   r    r&   r   r#   r6   r+   argvexitZarg_patternZarg_nameZ	arg_scoper   Zarg_show_contentsfnameZopen_workbookr
   r   r   r   r   <module>
   s4   	)