a
    b!                     @   s`  d Z dZddlmZ ddlZddlZddlmZmZ ddlm	Z	 ddl
mZ ddlmZmZ dd	lmZ dd
lmZ ejejejejfZejejejejejejejejiZeefZee e ee df Z!e"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,e%e&e'e(e)e*e+e,fZ-e.de/dedediZ0dd Z1dd Z2G dd deZ3G dd deZ4dddZ5dS )zManage individual cells in a spreadsheet.

The Cell class is required to know its value and type, display options,
and any other features of an Excel cell.  Utilities for referencing
cells using Excel's 'A1' column/row nomenclature are also provided.

zrestructuredtext en    )copyN)NUMERIC_TYPES
deprecated)IllegalCharacterError)get_column_letter)numbersis_date_format)StyleableObject)	Hyperlinkz#[\000-\010]|[\013-\014]|[\016-\037])z#NULL!z#DIV/0!z#VALUE!z#REF!z#NAME?z#NUM!#N/AsfnbZ	inlineStrestrc                 C   s@   t |trd}n$t |tr d}nt |tr0d}nd S |t| < |S )Nr   r   d)
isinstancer   STRING_TYPES
TIME_TYPES_TYPES)tvaluedt r   b/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/openpyxl/cell/cell.pyget_type@   s    


r   c                 C   sX   t | }|r|S |  dd  D ]"}t |}|r"|t | < |  S q"td|d S )N   z#Could not get time format for {0!r})TIME_FORMATSgetmro
ValueErrorformat)r   r   baser   r   r   get_time_formatM   s    


r$   c                       s   e Zd ZdZdZd( fdd	Zedd Zedd	 Zed
d Z	edd Z
edd Zdd Zdd Zdd Zdd Zedd Zejdd Zedd Zedd Zejdd Zed d! Zd)d#d$Zed%d& Zejd'd& Z  ZS )*CellzpDescribes cell associated properties.

    Properties of interest include style, type, value, and address.

    )rowcolumn_value	data_typeparent
_hyperlink_commentNc                    sH   t t| || || _|| _d | _d | _d| _|d ur>|| _d | _	d S )Nr   )
superr%   __init__r&   r'   r(   r+   r)   r   r,   )self	worksheetr&   r'   r   Zstyle_array	__class__r   r   r.   i   s    zCell.__init__c                 C   s   t | j}| | j S )z!This cell's coordinate (ex. 'A5'))r   r'   r&   )r/   colr   r   r   
coordinatex   s    
zCell.coordinatec                 C   s   | j S )z!The numerical index of the column)r'   r/   r   r   r   col_idx   s    zCell.col_idxc                 C   s
   t | jS N)r   r'   r5   r   r   r   column_letter   s    zCell.column_letterc                 C   s   | j jS r7   )r*   encodingr5   r   r   r   r9      s    zCell.encodingc                 C   s
   | j j jS r7   )r*   epochr5   r   r   r   	base_date   s    zCell.base_datec                 C   s   d | jj| jS )Nz<Cell {0!r}.{1}>r"   r*   titler4   r5   r   r   r   __repr__   s    zCell.__repr__c                 C   sN   |du rdS t |ts"t|| j}t|}|dd }tt|drJt|S )z5Check string coding, length, and line break characterNi  )r   r   r9   nextILLEGAL_CHARACTERS_REfinditerr   r/   r   r   r   r   check_string   s    
zCell.check_stringc                 C   s$   z
t |W S  ty   Y dS 0 dS )z Tries to convert Error" else N/Ar   N)r   UnicodeDecodeErrorrB   r   r   r   check_error   s    
zCell.check_errorc                 C   s   d| _ t|}zt| }W n ty6   t||}Y n0 |du rV|durVtd||r`|| _ |dkr~t| jst	|| _n>|dkr| 
|}t|dkr|drd| _ n|tv rd	| _ || _dS )
z*Given a value, infer the correct data typer   NzCannot convert {0!r} to Excelr   r   r   =r   r   )r)   typer   KeyErrorr   r!   r"   r   number_formatr$   rC   len
startswithERROR_CODESr(   )r/   r   r   r   r   r   r   _bind_value   s(    

zCell._bind_valuec                 C   s   | j S )zGet or set the value held in the cell.

        :type: depends on the value (string, float, int or
            :class:`datetime.datetime`)
        r(   r5   r   r   r   r      s    z
Cell.valuec                 C   s   |  | dS )z1Set the value and infer type and display options.N)rM   rB   r   r   r   r      s    c                 C   s   | j S )z#Always returns the value for excel.rN   r5   r   r   r   internal_value   s    zCell.internal_valuec                 C   s   | j S )z.Return the hyperlink target or an empty string)r+   r5   r   r   r   	hyperlink   s    zCell.hyperlinkc                 C   sP   |du rd| _ n<t|ts&td|d}| j|_|| _ | jdu rL|jpH|j| _dS )a  Set value and display for hyperlinks in a cell.
        Automatically sets the `value` of the cell with link text,
        but you can modify it afterwards by setting the `value`
        property, and the hyperlink will remain.
        Hyperlink is removed if set to ``None``.N )reftarget)	r+   r   r
   r4   rR   r(   rS   locationr   )r/   valr   r   r   rP      s    

c                 C   s   | j dkp| j dkot| jS )zFTrue if the value is formatted as a date

        :type: bool
        r   r   )r)   r   rI   r5   r   r   r   is_date   s    
zCell.is_dater   c                 C   s$   | j | }| j| }| jj||dS )zReturns a cell location relative to this cell.

        :param row: number of rows to offset
        :type row: int

        :param column: number of columns to offset
        :type column: int

        :rtype: :class:`openpyxl.cell.Cell`
        )r'   r&   )r6   r&   r*   cell)r/   r&   r'   Zoffset_columnZ
offset_rowr   r   r   offset  s    

zCell.offsetc                 C   s   | j S )zn Returns the comment associated with this cell

            :type: :class:`openpyxl.comments.Comment`
        )r,   r5   r   r   r   comment  s    zCell.commentc                 C   sD   |dur"|j rt|}||  n|du r:| jr:| j  || _dS )z,
        Assign a comment to a cell
        N)r*   r   bindr,   ZunbindrB   r   r   r   rY     s    
)NNNN)r   r   )__name__
__module____qualname____doc__	__slots__r.   propertyr4   r6   r8   r9   r;   r>   rC   rE   rM   r   setterrO   rP   rV   rX   rY   __classcell__r   r   r1   r   r%   Y   sD   














r%   c                       sL   e Zd ZdZdZdZdZdZdZd	 fdd	Z	dd Z
ejZeZeZ  ZS )

MergedCellz
    Describes the properties of a cell in a merged cell and helps to
    display the borders of the merged cell.

    The value of a MergedCell is always None.
    )r&   r'   Nr   c                    s    t t| | || _|| _d S r7   )r-   rc   r.   r&   r'   )r/   r0   r&   r'   r1   r   r   r.   :  s    zMergedCell.__init__c                 C   s   d | jj| jS )Nz<MergedCell {0!r}.{1}>r<   r5   r   r   r   r>   @  s    zMergedCell.__repr__)NN)r[   r\   r]   r^   r_   r(   r)   rY   rP   r.   r>   r%   r4   r,   r   rb   r   r   r1   r   rc   )  s   rc   c                 C   s   t | dd|dS )Nr   )r0   r'   r&   r   )r%   )wsr   r   r   r   WriteOnlyCellH  s    re   )NN)6r^   Z__docformat__r   datetimereZopenpyxl.compatr   r   Zopenpyxl.utils.exceptionsr   Zopenpyxl.utilsr   Zopenpyxl.stylesr   r   Zopenpyxl.styles.styleabler	   Zopenpyxl.worksheet.hyperlinkr
   datetime	timedeltar   ZFORMAT_DATE_DATETIMEZFORMAT_DATE_YYYYMMDD2ZFORMAT_DATE_TIME6ZFORMAT_DATE_TIMEDELTAr   r   bytesr   boolrG   ZKNOWN_TYPEScompiler@   rL   ZTYPE_STRINGZTYPE_FORMULAZTYPE_NUMERICZ	TYPE_BOOLZ	TYPE_NULLZTYPE_INLINEZ
TYPE_ERRORZTYPE_FORMULA_CACHE_STRINGZVALID_TYPESintfloatr   r   r$   r%   rc   re   r   r   r   r   <module>   sL   
 Q