U o^@sTdZddlmZddlmZmZddlmZddlm Z ddZ Gd d d e Z d S) z Read worksheets on-demand ) Worksheet) ReadOnlyCell EMPTY_CELL)get_column_letter)WorkSheetParsercCst|g}|SN)rparse_dimensions)sourceparserr w/private/var/folders/sd/whlwsn6x1_qgglc0mjv25_695qk2gl/T/pip-install-4zq3fp6i/openpyxl/openpyxl/worksheet/_read_only.pyread_dimension s rc@seZdZdZdZdZZejZej Z ej Z ej Z ej Z ej Z ddZddZddZdd d Zdd d ZddZd ddZddZddZeddZeddZeddZeddZdS)!ReadOnlyWorksheetrNcCs*||_||_d|_||_||_|dSr)parenttitleZ _current_row_worksheet_path_shared_strings _get_size)selfZparent_workbookrZworksheet_pathZshared_stringsr r r __init__"s zReadOnlyWorksheet.__init__cCsB|}t|g}|}||dk r>|\|_|_|_|_dSr) _get_sourcerr close _min_column_min_row _max_column_max_row)rsrcr Z dimensionsr r r r+s  zReadOnlyWorksheet._get_sizecCs|jj|jS)z0Parse xml source on demand, must close after use)rZ_archiveopenrrr r r r4szReadOnlyWorksheet._get_sourceFccst}|r d}|p|j}|p|j}g}|dk r>|f|d|}|}d} |} t| |j|jj|jj|jj d} | D]`\} } |dk r| |krqt || D]} |d7}|Vq|| krv| | |||} |d7}| Vqv|dk r|| krt ||dD] } |Vq| dS)zt The source worksheet file may have columns or rows missing. Missing cells will be created. Nr) data_onlyepochZ date_formats)r max_columnmax_rowrrrrr r!Z _date_formatsparserange_get_rowr)rmin_colmin_rowmax_colr# values_onlyZfillerZ empty_rowcounteridxrr row_r r r _cells_by_row9s<  zReadOnlyWorksheet._cells_by_rowc Cs|s |s dS|p|dd}|d|}tg|}|r@dg|}|D]L}|d}||krd|krDnqD||} |d|| <|sDt|f||| <qDt|S)zT Make sure a row contains always the same number of cells or values r columnrNvalue)rrtuple) rr-r'r)r*Z row_widthZnew_rowcellr+r,r r r r&ds    zReadOnlyWorksheet._get_rowcCs*|||||D]}|r|dSqtS)z4Cells are returned by a generator which can be emptyr)r/r)rr-r1r r r _get_cell}szReadOnlyWorksheet._get_cellcCsLt|j|jgs&|r|ntdt|j|jdt|j|jS)Nz9Worksheet is unsized, use calculate_dimension(force=True):)allr"r#_calculate_dimension ValueErrorr min_columnr()rforcer r r calculate_dimensions  z%ReadOnlyWorksheet.calculate_dimensioncCs<d}|jD]}|sq |d}t||j}q |j|_||_dS)z Loop through all the cells to get the size of a worksheet. Do this only if it is explicitly requested. rr0N)rowsmaxr1r-rr)rr)rr4r r r r8s z&ReadOnlyWorksheet._calculate_dimensioncCsd|_|_dS)z Remove worksheet dimensions if these are incorrect in the worksheet source. NB. This probably indicates a bug in the library or application that created the workbook. N)rrrr r r reset_dimensionssz"ReadOnlyWorksheet.reset_dimensionscCs|jSr)rrr r r r(szReadOnlyWorksheet.min_rowcCs|jSr)rrr r r r#szReadOnlyWorksheet.max_rowcCs|jSr)rrr r r r:szReadOnlyWorksheet.min_columncCs|jSr)rrr r r r"szReadOnlyWorksheet.max_column)F)rNF)F)__name__ __module__ __qualname__rrrrrr4Z iter_rowsvaluesr= __getitem____iter__rrrr/r&r5r<r8r@propertyr(r#r:r"r r r r rs4   +      rN) __doc__Z worksheetrZopenpyxl.cell.read_onlyrrZopenpyxl.utilsrZ_readerrrobjectrr r r r s