U
    g\                     @   s~   d Z ddlZddlmZ ddlmZmZ ddlmZm	Z	 ddl
mZ ddlmZ ddlZedZdd
dZG dd dZdS )z Tablib - XLSX Support.
    N)BytesIO)ExcelReaderload_workbook)	AlignmentFont)get_column_letter)Workbookz[\\*?:/\[\]]-c                 C   s   t t|| d d S )N   )resubINVALID_TITLE_REGEX)sreplace r   8/tmp/pip-unpacked-wheel-2jt74g4_/tablib/formats/_xlsx.pysafe_xlsx_sheet_title   s    r   c                   @   st   e Zd ZdZdZedd Zeddd	Zedd
dZedddZ	edddZ
edddZedddZdS )
XLSXFormatxlsx)r   c                 C   s6   zt |dd}|  W dS  tk
r0   Y dS X dS )z6Returns True if given stream is a readable excel file.F)	read_onlyTN)r   Zread_manifest	Exception)clsstreamreaderr   r   r   detect   s    zXLSXFormat.detectTr	   Fc                 C   sR   t  }|jd }|jr"t|j|nd|_| j||||d t }|| | S )a?  Returns XLSX representation of Dataset.

        If ``freeze_panes`` is True, Export will freeze panes only after first line.

        If ``dataset.title`` contains characters which are considered invalid for an XLSX file
        sheet name (http://www.excelcodex.com/2012/06/worksheets-naming-conventions/), they will
        be replaced with ``invalid_char_subst``.

        If ``escape`` is True, formulae will have the leading '=' character removed.
        This is a security measure to prevent formulae from executing by default
        in exported XLSX files.
        r   zTablib Datasetfreeze_panesescape)r   
worksheetstitler   
dset_sheetr   savegetvalue)r   datasetr   invalid_char_substr   wbwsr   r   r   r   
export_set%   s    

zXLSXFormat.export_setc                 C   s~   t  }|jD ]}|| qt|jD ]>\}}| }	|jrHt|j|nd| |	_| j||	||d q&t	 }
|
|
 |
 S )zKReturns XLSX representation of DataBook.
        See export_set().
        zSheet%sr   )r   r   remove	enumerateZ	_datasetsZcreate_sheetr   r   r    r   r!   r"   )r   Zdatabookr   r$   r   r%   sheetidsetr&   r   r   r   r   export_bookA   s    

zXLSXFormat.export_bookr   c                 C   s   |j |_ t|jD ]l\}}||k r$qdd |D }||krF|rF||_q||krtt||jk rt|dg|jt|  7 }|| qdS )zPopulates dataset with sheet.c                 S   s   g | ]
}|j qS r   )value).0cr   r   r   
<listcomp>`   s     z+XLSXFormat.import_sheet.<locals>.<listcomp> N)r   r)   Zrowsheaderslenwidthappend)r   r,   r*   r3   
skip_linesr+   rowZrow_valsr   r   r   import_sheetW   s    zXLSXFormat.import_sheetc                 C   s0   |   t||dd}|j}| |||| dS z!Returns databook from XLS stream.T)r   Z	data_onlyN)wiper   activer9   )r   r,   	in_streamr3   r   r7   xls_bookr*   r   r   r   
import_seth   s    zXLSXFormat.import_setc                 C   sF   |   t||dd}|jD ]$}t }| ||| || qdS r:   )r;   r   r   tablibZDatasetr9   Z	add_sheet)r   Zdbookr=   r3   r   r>   r*   r,   r   r   r   import_bookr   s    
zXLSXFormat.import_bookc              
   C   s<  |j dd}t|jD ]&\}}|}||d | |d f qtdd}	tdd}
t|D ]\}}|d }t|D ]\}}t|d }|| |  }|dkr|jr|	|_|rd|_	n(t
||jk r|	|_nd	t|kr|
|_z
||_W n  tk
r   t||_Y nX |rr|jd
krr|jdrr|jdd|_qrqZdS )z-Completes given worksheet from given Dataset.F)Zdictsr      T)bold)	wrap_textA2
f=r2   N)_packager)   Z_separatorsinsertr   r   r   r3   fontr   r4   r5   str	alignmentr.   
ValueErrorZ	data_type
startswithr   )r   r#   r&   r   r   rI   r+   sep_offsetrC   rD   r8   Z
row_numberjcolZcol_idxcellr   r   r   r       s2    


zXLSXFormat.dset_sheetN)Tr	   F)Tr	   F)Tr   )TTr   )TT)TF)__name__
__module____qualname__r   
extensionsclassmethodr   r'   r-   r9   r?   rA   r    r   r   r   r   r      s    
	r   )r	   )__doc__r   ior   Zopenpyxl.reader.excelr   r   Zopenpyxl.stylesr   r   Zopenpyxl.utilsr   Zopenpyxl.workbookr   r@   compiler   r   r   r   r   r   r   <module>   s   

