1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
U
¬ý°d' ã@s¦ddlmZddlmZmZddlZddlmZm    Z    m
Z
m Z ddl m Z ddlmZddlZddlmZddlmZer„dd    lmZeed
d Gd d „d eƒƒZdS)é)Ú annotations)Ú TYPE_CHECKINGÚcastN)ÚFilePathÚ
ReadBufferÚScalarÚStorageOptions)Úimport_optional_dependency)Údoc)Ú _shared_docs)ÚBaseExcelReader)ÚNaTTypeÚstorage_options©rcsÚeZdZd,ddddœ‡fdd„ Zedd    „ƒZdd
œd d „Zed dœdd„ƒZeddœdd„ƒZddœdd„Z    d dœdd„Z
d-dddœdd„Z ddœd d!„Z ddœd"d#„Z d$dœd%d&„Zd'dœd(d)„Zd dœd*d+„Z‡ZS).Ú    ODFReaderNzFilePath | ReadBuffer[bytes]rÚNone)Úfilepath_or_bufferrÚreturncstdƒtƒj||ddS)zß
        Read tables out of OpenDocument formatted files.
 
        Parameters
        ----------
        filepath_or_buffer : str, path to be parsed or
            an open readable stream.
        {storage_options}
        ZodfrN)r    ÚsuperÚ__init__)Úselfrr©Ú    __class__©úQd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/io/excel/_odfreader.pyrszODFReader.__init__cCsddlm}|S)Nr)Ú OpenDocument)Úodf.opendocumentr)rrrrrÚ_workbook_class/s zODFReader._workbook_class)rcCsddlm}||ƒS)Nr)Úload)rr)rrrrrrÚ load_workbook5s zODFReader.load_workbookÚstr)rcCsdS)z'Property for compat with other readers.Úr)rrrrÚ empty_value:szODFReader.empty_valuez    list[str]cCs&ddlm}|j |¡}dd„|DƒS)z4Return a list of sheet names present in the documentr©ÚTablecSsg|]}| d¡‘qS©Úname)Ú getAttribute)Ú.0ÚtrrrÚ
<listcomp>Esz)ODFReader.sheet_names.<locals>.<listcomp>)Ú    odf.tabler$ÚbookÚgetElementsByType)rr$ÚtablesrrrÚ sheet_names?s  zODFReader.sheet_namesÚint)ÚindexcCs*ddlm}| |¡|j |¡}||S)Nrr#)r+r$Zraise_if_bad_sheet_by_indexr,r-)rr1r$r.rrrÚget_sheet_by_indexGs 
 zODFReader.get_sheet_by_indexr%cCs^ddlm}| |¡|j |¡}|D]}| d¡|kr&|Sq&| ¡td|›dƒ‚dS)Nrr#r&zsheet z
 not found)r+r$Zraise_if_bad_sheet_by_namer,r-r'ÚcloseÚ
ValueError)rr&r$r.ÚtablerrrÚget_sheet_by_nameNs 
 
zODFReader.get_sheet_by_namez
int | Nonezlist[list[Scalar | NaTType]])Úfile_rows_neededrcsŒddlm}m}m}|ƒj}|ƒj}||h‰| |¡}d}    d}
g} |D]
} ‡fdd„| jDƒ} d}g}| D]d}|j|kr†| |¡}n|j}|     |¡}||jkrª||7}ql| 
|jg|¡d}| 
|g|¡ql|
t |ƒkræt |ƒ}
|  | ¡}|  | ¡r|    |7}    n2|  
|jgg|    ¡d}    t|ƒD]}|  |¡q&|dk    rFt | ƒ|krFqTqF| D].}t |ƒ|
krX| 
|jg|
t |ƒ¡qX| S)z9
        Parse an ODF Table into a list of lists
        r)ÚCoveredTableCellÚ    TableCellÚTableRowcs$g|]}t|dƒr|jˆkr|‘qS)Úqname)Úhasattrr;)r(Úx©Ú
cell_namesrrr*rs
 
þz,ODFReader.get_sheet_data.<locals>.<listcomp>N)r+r8r9r:r;r-Ú
childNodesÚ_get_cell_valuer"Ú_get_column_repeatÚextendÚlenÚ_get_row_repeatÚ _is_empty_rowÚrangeÚappend)rZsheetr7r8r9r:Zcovered_cell_nameZtable_cell_nameZ
sheet_rowsZ
empty_rowsZ max_row_lenr5Z    sheet_rowZ sheet_cellsZ empty_cellsZ    table_rowZ
sheet_cellÚvalueZ column_repeatZ
row_repeatÚ_Úrowrr>rÚget_sheet_data[sN
 
 
þ
 
 
 
 
 
 zODFReader.get_sheet_datacCs"ddlm}t|j |dfd¡ƒS)z«
        Return number of times this row was repeated
        Repeating an empty row appeared to be a common way
        of representing sparse rows in the table.
        r©ÚTABLENSznumber-rows-repeatedé©Úodf.namespacesrNr0Ú
attributesÚget)rrKrNrrrrE s zODFReader._get_row_repeatcCs"ddlm}t|j |dfd¡ƒS)NrrMznumber-columns-repeatedrOrP)rÚcellrNrrrrBªs zODFReader._get_column_repeatÚboolcCs$|jD]}t|jƒdkrdSqdS)z4
        Helper function to find empty rows
        rFT)r@rD)rrKÚcolumnrrrrF¯s
zODFReader._is_empty_rowzScalar | NaTTypecCsBddlm}t|ƒdkrtjS|j |df¡}|dkrJt|ƒdkrFdSdS|dkrX|jS|d    krŒt|j |d
f¡ƒ}t    |ƒ}||krˆ|S|S|d kr¬|j |d
f¡}t|ƒS|d kr¾| 
|¡S|d krÞ|j |d
f¡}t|ƒS|dkr|j |df¡}t   |¡S|dkr(t   t|ƒ¡}t t| ¡ƒS| ¡td|›ƒ‚dS)Nr)ÚOFFICENSz#N/Az
value-typeÚbooleanÚTRUETFÚfloatrIÚ
percentageÚstringÚcurrencyÚdatez
date-valueÚtimezUnrecognized type )rQrWr ÚnpÚnanrRrSr"rZr0Ú_get_cell_string_valueÚpdÚ    Timestamprrr_r3r4)rrTrWZ    cell_typeZ
cell_valueÚvalZstamprrrrA¹s@   
 
 
 
zODFReader._get_cell_valuec    Cs¦ddlm}ddlm}ddlm}|ƒj}g}|jD]d}t||ƒr†|j|krtt    |j
  |dfd¡ƒ}|  d|¡qš|  |  |¡¡q6|  t|ƒ d¡¡q6d     |¡S)
        Find and decode OpenDocument text:s tags that represent
        a run length encoded sequence of space characters.
        r)ÚElement)ÚTEXTNS)ÚSÚcrOú Ú
r!)Z odf.elementrfrQrgZodf.textrhr;r@Ú
isinstancer0rRrSrHrbr ÚstripÚjoin)    rrTrfrgrhZtext_srIÚfragmentÚspacesrrrrbàs   
 
 
z ODFReader._get_cell_string_value)N)N)Ú__name__Ú
__module__Ú __qualname__rÚpropertyrrr"r/r2r6rLrErBrFrArbÚ __classcell__rrrrrs$ý
ÿE
 
'r)Ú
__future__rÚtypingrrÚnumpyr`Zpandas._typingrrrrZpandas.compat._optionalr    Zpandas.util._decoratorsr
ZpandasrcZpandas.core.shared_docsr Zpandas.io.excel._baser Zpandas._libs.tslibs.nattyper rrrrrÚ<module>s