
    {bh>                         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     c/mnt/ACDE16A4DE16673C/PROJECTS/MIS_PORTAL/venv/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e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	                  ||||       | j                  ||       t               }|j                  |       |j                         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
        (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.

        If ``column_width`` is set to "adaptive", the column width will be set to the maximum
        width of the content in each column. If it is set to an integer, the column width will be
        set to that integer value. If it is set to None, the column width will be set as the
        default openpyxl.Worksheet width value.

        r   zTablib Datasetfreeze_panesescape)	r	   
worksheetstitler   
dset_sheet_adapt_column_widthr   savegetvalue)	r   datasetr!   invalid_char_substr"   column_widthwbwsr   s	            r   
export_setzXLSXFormat.export_set$   s    , Z]]1 }} "'--1CD"2 	
 	wfML1
  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_bookJ   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$   r2   rowsvalueheaderslenwidthappend)	r   r8   r6   r>   
skip_linesr7   rowcrow_valss	            r   import_sheetzXLSXFormat.import_sheet`   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   activerF   )r   r8   	in_streamr>   r   rB   xls_bookr6   s           r   
import_setzXLSXFormat.import_setq   s8     			 i4Pugz:r   c                     |j                          t        ||d      }|j                  D ]:  }t        j                         }| j                  |||       |j                  |       < yrH   )rJ   r   r#   tablibDatasetrF   	add_sheet)r   dbookrL   r>   r   rM   r6   r8   s           r   import_bookzXLSXFormat.import_book{   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=r;   N)_packager2   _separatorsinsertr   r   r   r>   fontr!   r?   r@   str	alignmentr=   
ValueError	data_type
startswithr   )r   r)   r-   r!   r"   r^   r7   sep_offsetrX   rY   rC   
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c                    t        |t              r|dk7  rd| d}t        |      |y g }|dk(  rg|j                  D ]W  }t	        |      D ]G  \  }}t        t        |            }t        |      |kD  r|||   kD  s1|||<   7|j                  |       I Y n|g|j                  z  }t	        |d      D ]"  \  }}	|	|j                  t        |         _
        $ y )Nadaptivez Invalid value for column_width: z#. Must be 'adaptive' or an integer.rW   )
isinstancerb   rd   valuesr2   r?   rA   
max_columncolumn_dimensionsr   r@   )
r   	worksheetr@   msgcolumn_widthsrC   r7   rm   
cell_widthr+   s
             r   r&   zXLSXFormat._adapt_column_width   s    eS!ez&925' :4 4  S/!=J '' 9(~ 9GAt!$SYJ=)A-%a(88/9M!,%,,Z899 #Gi&:&::M(: 	SOA|FRI''(9!(<=C	Sr   N)T-Fro   )Trx   F)Tr   )TTr   )TT)TF)__name__
__module____qualname__r$   
extensionsclassmethodr   r.   r9   rF   rN   rT   r%   r&    r   r   r   r      s    EJ	 	 GJ.8#! #!J ! !* & &  ; ; 
" 
" '= '=R S Sr   r   )rx   )__doc__r   ior   openpyxl.reader.excelr   r   openpyxl.stylesr   r   openpyxl.utilsr   openpyxl.workbookr	   rP   compiler   r   r   r~   r   r   <module>r      sC    	  < + , &  bjj1 8xS xSr   