U
    yag\  ã                   @   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   úH/var/www/html/myvenv/lib/python3.8/site-packages/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)   ÚrowsÚheadersÚlenÚwidthÚappend)r   r,   r*   r4   Ú
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   Úactiver:   )r   r,   Ú	in_streamr4   r   r8   Ú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Datasetr:   Z	add_sheet)r   Zdbookr>   r4   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¶|	|_|rÞd|_	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   r4   Zfontr   r5   r6   ÚstrZ	alignmentr.   Ú
ValueErrorZ	data_typeÚ
startswithr   )r   r#   r&   r   r   rJ   r+   ÚsepÚ_offsetrD   rE   r9   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-   r:   r@   rB   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   rA   Úcompiler   r   r   r   r   r   r   Ú<module>   s   

