
    ?wg                         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j                  d      Zdd	Z G d
 d      Zy)z Tablib - XLSX Support.
    N)BytesIO)ExcelReaderload_workbook)	AlignmentFont)get_column_letter)Workbookz[\\*?:/\[\]]c                 >    t        j                  t        ||       d d S )N   )resubINVALID_TITLE_REGEX)sreplaces     K/var/www/horilla/myenv/lib/python3.12/site-packages/tablib/formats/_xlsx.pysafe_xlsx_sheet_titler      s    66%w23B77    c                       e Zd ZdZdZed        Zedd       Zedd       Zedd       Z	edd       Z
edd       Zedd	       Zy
)
XLSXFormatxlsx)r   c                 ^    	 t        |d      }|j                          y# t        $ r Y yw xY w)z6Returns True if given stream is a readable excel file.F)	read_onlyT)r   read_manifest	Exception)clsstreamreaders      r   detectzXLSXFormat.detect   s6    	 !59F  " 		s     	,,c                    t               }|j                  d   }|j                  rt        |j                  |      nd|_        | j	                  ||||       t               }|j                  |       |j                         S )as  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
        (https://web.archive.org/web/20230323081941/https://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   s           r   
export_setzXLSXFormat.export_set%   sr     Z]]1 }} "'--1CD"2 	
 	wfM
  r   c                    t               }|j                  D ]  }|j                  |        t        |j                        D ]V  \  }}|j                         }	|j                  rt        |j                  |      nd| |	_        | j                  ||	||       X t               }
|j                  |
       |
j                         S )zKReturns XLSX representation of DataBook.
        See export_set().
        Sheetr    )r	   r#   remove	enumerate	_datasetscreate_sheetr$   r   r%   r   r&   r'   )r   databookr!   r)   r"   r*   sheetidsetr+   r   s              r   export_bookzXLSXFormat.export_bookB   s     Z]] 	EIIe	 !3!34 	OGAt"B :: &djj2DE%*1#; H
 NN4,vNN	O 
  r   c                 `   |j                   |_         t        |j                        D ]  \  }}||k  r|D cg c]  }|j                   }}||k(  r
|r||_        4||kD  r7t        |      |j                  k  r|dg|j                  t        |      z
  z  z  }|j                  |        yc c}w )zPopulates dataset with sheet. N)r$   r0   rowsvalueheaderslenwidthappend)	r   r6   r4   r<   
skip_linesr5   rowcrow_valss	            r   import_sheetzXLSXFormat.import_sheetX   s     [[


+ 		&FAs:~),-A-H-J7'z>c(mdjj&@

S](B CCHH%		& .s   B+c                     |j                          t        ||d      }|j                  }| j                  ||||       yz!Returns databook from XLS stream.T)r   	data_onlyN)wiper   activerD   )r   r6   	in_streamr<   r   r@   xls_bookr4   s           r   
import_setzXLSXFormat.import_seti   s8     			 i4Pugz:r   c                     |j                          t        ||d      }|j                  D ]:  }t        j                         }| j                  |||       |j                  |       < yrF   )rH   r   r#   tablibDatasetrD   	add_sheet)r   dbookrJ   r<   r   rK   r4   r6   s           r   import_bookzXLSXFormat.import_books   sZ     	

 i4P(( 	"E>>#DT5'2OOD!	"r   c                    |j                  d      }t        |j                        D ]#  \  }}|}|j                  |d   |z   |d   f       % t	        d      }	t        d      }
t        |      D ]  \  }}|dz   }t        |      D ]  \  }}t        |dz         }|| |    }|dk(  r|j                  r|	|_        |r<d|_	        n4t        |      |j                  k  r|	|_        nd	t        |      v r|
|_        	 ||_        |s~|j                   d
k(  s|j                  j#                  d      s|j                  j%                  dd      |_          y# t        $ r t        |      |_        Y pw xY w)z-Completes given worksheet from given Dataset.F)dictsr      T)bold)	wrap_textA2
f=r9   N)_packager0   _separatorsinsertr   r   r   r<   fontr!   r=   r>   str	alignmentr;   
ValueError	data_type
startswithr   )r   r(   r+   r!   r"   r\   r5   sep_offsetrV   rW   rA   
row_numberjcolcol_idxcells                    r   r%   zXLSXFormat.dset_sheet   st    ##%#0 3 34 	;FAsGOOSVg-Q	:	; -	) 	=FAsQJ#C. =3+AE2WIj\23 !O $DI#*. X- $DI s3x')2*!$DJ dnn3

8M8Mc8R!%!3!3C!<DJ5=	=0 " *!$SDJ*s   ;EE32E3N)T-F)Tr   )TTr   )TT)TF)__name__
__module____qualname__r$   
extensionsclassmethodr   r,   r7   rD   rL   rR   r%    r   r   r   r      s    EJ	 	 ! !8 ! !* & &  ; ; 
" 
" '= '=r   r   )rl   )__doc__r   ior   openpyxl.reader.excelr   r   openpyxl.stylesr   r   openpyxl.utilsr   openpyxl.workbookr	   rN   compiler   r   r   rr   r   r   <module>rz      sC    
  < + , &  bjj1 8S= S=r   