Skip to content

Commit 94aec7c

Browse files
committed
🐛 fix date offset problem, #54, #135
1 parent 40462db commit 94aec7c

File tree

3 files changed

+24
-5
lines changed

3 files changed

+24
-5
lines changed

CHANGELOG.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
Change log
22
================================================================================
33

4+
0.5.7 - 15.03.2018
5+
--------------------------------------------------------------------------------
6+
7+
Added
8+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9+
10+
#. `pyexcel#54 <https://github.com/pyexcel/pyexcel/issues/54>`_, Book.datemode
11+
attribute of that workbook should be passed always.
12+
413
0.5.6 - 15.03.2018
514
--------------------------------------------------------------------------------
615

pyexcel_xls/xlsr.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,13 @@ class XLSheet(SheetReader):
4444
4545
Currently only support first sheet in the file
4646
"""
47-
def __init__(self, sheet, auto_detect_int=True, **keywords):
47+
def __init__(self, sheet, auto_detect_int=True, date_mode=0, **keywords):
4848
SheetReader.__init__(self, sheet, **keywords)
4949
self.__auto_detect_int = auto_detect_int
5050
self.__hidden_cols = []
5151
self.__hidden_rows = []
5252
self.__merged_cells = {}
53+
self._book_date_mode = date_mode
5354
if keywords.get('detect_merged_cells') is True:
5455
for merged_cell_ranges in sheet.merged_cells:
5556
merged_cells = MergedCell(*merged_cell_ranges)
@@ -88,7 +89,7 @@ def cell_value(self, row, column):
8889
value = self._native_sheet.cell_value(row, column)
8990

9091
if cell_type == xlrd.XL_CELL_DATE:
91-
value = xldate_to_python_date(value)
92+
value = xldate_to_python_date(value, self._book_date_mode)
9293
elif cell_type == xlrd.XL_CELL_NUMBER and self.__auto_detect_int:
9394
if has_no_digits_in_float(value):
9495
value = int(value)
@@ -176,7 +177,8 @@ def read_all(self):
176177
return result
177178

178179
def read_sheet(self, native_sheet):
179-
sheet = XLSheet(native_sheet, **self._keywords)
180+
sheet = XLSheet(native_sheet, date_mode=self._native_book.datemode,
181+
**self._keywords)
180182
return {sheet.name: sheet.to_array()}
181183

182184
def _get_book(self, on_demand=False):
@@ -208,11 +210,12 @@ def _extract_xlrd_params(self):
208210
return params
209211

210212

211-
def xldate_to_python_date(value):
213+
def xldate_to_python_date(value, date_mode):
212214
"""
213215
convert xl date to python date
214216
"""
215-
date_tuple = xlrd.xldate_as_tuple(value, 0)
217+
date_tuple = xlrd.xldate_as_tuple(value, date_mode)
218+
216219
ret = None
217220
if date_tuple == (0, 0, 0, 0, 0, 0):
218221
ret = datetime.datetime(1900, 1, 1, 0, 0, 0)

tests/test_bug_fixes.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import os
88
import pyexcel as pe
99
from pyexcel_xls import save_data
10+
from pyexcel_xls.xlsr import xldate_to_python_date
1011
from pyexcel_xls.xlsw import XLSWriter as Writer
1112
from _compact import OrderedDict
1213
from nose.tools import eq_, raises
@@ -100,5 +101,11 @@ def test_empty_book_pyexcel_issue_120():
100101
writer.write({})
101102

102103

104+
def test_pyexcel_issue_54():
105+
xlvalue = 41071.0
106+
date = xldate_to_python_date(xlvalue, 1)
107+
eq_(date, datetime.date(2016, 6, 12))
108+
109+
103110
def get_fixture(file_name):
104111
return os.path.join("tests", "fixtures", file_name)

0 commit comments

Comments
 (0)