diff --git a/pyexcel_xls/__init__.py b/pyexcel_xls/__init__.py index 3fe12d6..ddbfa8c 100644 --- a/pyexcel_xls/__init__.py +++ b/pyexcel_xls/__init__.py @@ -16,12 +16,14 @@ from pyexcel_io.io import get_data as read_data, isstream, store_data as write_d def get_data(afile, file_type=None, **keywords): + """standalone module function for writing module supported file type""" if isstream(afile) and file_type is None: file_type = 'xls' return read_data(afile, file_type=file_type, **keywords) def save_data(afile, data, file_type=None, **keywords): + """standalone module function for reading module supported file type""" if isstream(afile) and file_type is None: file_type = 'xls' write_data(afile, data, file_type=file_type, **keywords) diff --git a/pyexcel_xls/xls.py b/pyexcel_xls/xls.py index ffe52e0..c9e64ba 100644 --- a/pyexcel_xls/xls.py +++ b/pyexcel_xls/xls.py @@ -29,10 +29,8 @@ DEFAULT_DATETIME_FORMAT = "%s %s" % (DEFAULT_DATE_FORMAT, DEFAULT_TIME_FORMAT) def is_integer_ok_for_xl_float(value): - if value == math.floor(value): - return True - else: - return False + """check if a float value had zero value in digits""" + return value == math.floor(value) def xldate_to_python_date(value): @@ -72,7 +70,11 @@ class XLSheet(SheetReader): def __init__(self, sheet, auto_detect_int=True, **keywords): SheetReader.__init__(self, sheet, **keywords) self.auto_detect_int = auto_detect_int - + + @property + def name(self): + return self.native_sheet.name + def number_of_rows(self): """ Number of rows in the xls sheet @@ -99,16 +101,16 @@ class XLSheet(SheetReader): return value def to_array(self): - for r in range(0, self.number_of_rows()): - row = [] + for row in range(0, self.number_of_rows()): + return_row = [] tmp_row = [] - for c in range(0, self.number_of_columns()): - cell_value = self.cell_value(r, c) + for column in range(0, self.number_of_columns()): + cell_value = self.cell_value(row, column) tmp_row.append(cell_value) if cell_value is not None and cell_value != '': - row += tmp_row + return_row += tmp_row tmp_row = [] - yield row + yield return_row class XLSBook(BookReader): @@ -119,7 +121,6 @@ class XLSBook(BookReader): """ def __init__(self): BookReader.__init__(self) - self.book = None self.file_content = None def open(self, file_name, **keywords): @@ -133,33 +134,34 @@ class XLSBook(BookReader): self.file_content = file_content def close(self): - if self.book: - self.book.release_resources() + if self.native_book: + self.native_book.release_resources() def read_sheet_by_index(self, sheet_index): - self.book = self._get_book(on_demand=True) - sheet = self.book.sheet_by_index(sheet_index) - xlsheet = XLSheet(sheet, **self.keywords) - return {sheet.name: xlsheet.to_array()} + self.native_book = self._get_book(on_demand=True) + sheet = self.native_book.sheet_by_index(sheet_index) + return self.read_sheet(sheet) def read_sheet_by_name(self, sheet_name): - self.book = self._get_book(on_demand=True) + self.native_book = self._get_book(on_demand=True) try: - sheet = self.book.sheet_by_name(sheet_name) - except xlrd.XLRDError as e: - print(e) + sheet = self.native_book.sheet_by_name(sheet_name) + except xlrd.XLRDError: raise ValueError("%s cannot be found" % sheet_name) - xlsheet = XLSheet(sheet) - return {sheet.name: xlsheet.to_array()} + return self.read_sheet(sheet) def read_all(self): result = OrderedDict() - self.book = self._get_book() - for sheet in self.book.sheets(): - xlsheet = XLSheet(sheet, **self.keywords) - result[sheet.name] = xlsheet.to_array() + self.native_book = self._get_book() + for sheet in self.native_book.sheets(): + data_dict = self.read_sheet(sheet) + result.update(data_dict) return result + def read_sheet(self, native_sheet): + sheet = XLSheet(native_sheet, **self.keywords) + return {sheet.name: sheet.to_array()} + def _get_book(self, on_demand=False): if self.file_name: xls_book = xlrd.open_workbook(self.file_name, on_demand=on_demand) @@ -233,7 +235,7 @@ class XLSWriter(BookWriter): encoding='ascii', style_compression=2, **keywords): BookWriter.open(self, file_name, **keywords) self.work_book = Workbook(style_compression=style_compression, - encoding=encoding) + encoding=encoding) def create_sheet(self, name): return XLSheetWriter(self.work_book, None, name) @@ -248,25 +250,19 @@ class XLSWriter(BookWriter): _xls_reader_registry = { "file_type": "xls", "reader": XLSBook, - "stream_type": "binary", - "mime_type": "application/vnd.ms-excel", - "library": "xlrd" -} - -_xls_writer_registry = { - "file_type": "xls", "writer": XLSWriter, "stream_type": "binary", "mime_type": "application/vnd.ms-excel", - "library": "xlwt-future" + "library": "pyexcel-xls" } + _xlsm_registry = { "file_type": "xlsm", "reader": XLSBook, "stream_type": "binary", "mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - "library": "xlrd" + "library": "pyexcel-xls" } _xlsx_registry = { @@ -274,8 +270,9 @@ _xlsx_registry = { "reader": XLSBook, "stream_type": "binary", "mime_type": "application/vnd.ms-excel.sheet.macroenabled.12", - "library": "xlrd" + "library": "pyexcel-xls" } -exports = (_xls_reader_registry, _xls_writer_registry, - _xlsm_registry, _xlsx_registry) +exports = (_xls_reader_registry, + _xlsm_registry, + _xlsx_registry) diff --git a/tests/test_mutliple_sheets.py b/tests/test_mutliple_sheets.py index a90b020..66db6f5 100644 --- a/tests/test_mutliple_sheets.py +++ b/tests/test_mutliple_sheets.py @@ -55,9 +55,9 @@ class TestAddBooks: def test_load_a_single_sheet2(self): - b1 = pyexcel.load_book(self.testfile, sheet_index=2) + b1 = pyexcel.load_book(self.testfile, sheet_index=0) assert len(b1.sheet_names()) == 1 - assert b1['Sheet3'].to_array() == self.content['Sheet3'] + assert b1['Sheet1'].to_array() == self.content['Sheet1'] @raises(IndexError) def test_load_a_single_sheet3(self):