@@ -53,6 +53,23 @@ def read_excel(path_or_buf, sheetname, kind=None, **kwds):
53
53
return ExcelFile (path_or_buf , kind = kind ).parse (sheetname = sheetname ,
54
54
kind = kind , ** kwds )
55
55
56
+ def excel_value_to_python_value (value , typ , datemode ):
57
+ from xlrd import (xldate_as_tuple , XL_CELL_DATE ,
58
+ XL_CELL_ERROR , XL_CELL_BOOLEAN )
59
+
60
+ if typ == XL_CELL_DATE :
61
+ dt = xldate_as_tuple (value , datemode )
62
+ # how to produce this first case?
63
+ if dt [0 ] < datetime .MINYEAR : # pragma: no cover
64
+ value = datetime .time (* dt [3 :])
65
+ else :
66
+ value = datetime .datetime (* dt )
67
+ elif typ == XL_CELL_ERROR :
68
+ value = np .nan
69
+ elif typ == XL_CELL_BOOLEAN :
70
+ value = bool (value )
71
+
72
+ return value
56
73
57
74
class ExcelFile (object ):
58
75
"""
@@ -174,8 +191,6 @@ def _parse_excel(self, sheetname, header=0, skiprows=None, skip_footer=0,
174
191
index_col = None , has_index_names = None , parse_cols = None ,
175
192
parse_dates = False , date_parser = None , na_values = None ,
176
193
thousands = None , chunksize = None , ** kwds ):
177
- from xlrd import (xldate_as_tuple , XL_CELL_DATE ,
178
- XL_CELL_ERROR , XL_CELL_BOOLEAN )
179
194
180
195
datemode = self .book .datemode
181
196
if isinstance (sheetname , compat .string_types ):
@@ -193,17 +208,7 @@ def _parse_excel(self, sheetname, header=0, skiprows=None, skip_footer=0,
193
208
should_parse [j ] = self ._should_parse (j , parse_cols )
194
209
195
210
if parse_cols is None or should_parse [j ]:
196
- if typ == XL_CELL_DATE :
197
- dt = xldate_as_tuple (value , datemode )
198
- # how to produce this first case?
199
- if dt [0 ] < datetime .MINYEAR : # pragma: no cover
200
- value = datetime .time (* dt [3 :])
201
- else :
202
- value = datetime .datetime (* dt )
203
- elif typ == XL_CELL_ERROR :
204
- value = np .nan
205
- elif typ == XL_CELL_BOOLEAN :
206
- value = bool (value )
211
+ value = excel_value_to_python_value (value = value , typ = typ , datemode = datemode )
207
212
row .append (value )
208
213
209
214
data .append (row )
0 commit comments