diff options
| author | Kenneth Reitz <me@kennethreitz.org> | 2014-01-08 11:46:50 -0800 |
|---|---|---|
| committer | Kenneth Reitz <me@kennethreitz.org> | 2014-01-08 11:46:50 -0800 |
| commit | c74357cb20b1ac4e7496eaf6d05a5714317d4b5f (patch) | |
| tree | 454e55f5a91a2f28b1c37f4850993a94d70d1ffc /tablib | |
| parent | 939b0af551aabc345568d7b439fa97684604ae48 (diff) | |
| parent | 97b4401b18ed264f77072dd362ec8d7cca3f4571 (diff) | |
| download | tablib-c74357cb20b1ac4e7496eaf6d05a5714317d4b5f.tar.gz | |
Merge pull request #76 from djv/develop
xls and xlsx import support
Diffstat (limited to 'tablib')
| -rw-r--r-- | tablib/core.py | 2 | ||||
| -rw-r--r-- | tablib/formats/_xls.py | 16 | ||||
| -rw-r--r-- | tablib/formats/_xlsx.py | 49 |
3 files changed, 67 insertions, 0 deletions
diff --git a/tablib/core.py b/tablib/core.py index 5e041b0..851b25c 100644 --- a/tablib/core.py +++ b/tablib/core.py @@ -955,6 +955,8 @@ class Databook(object): except AttributeError: pass + def sheets(self): + return self._datasets def add_sheet(self, dataset): """Adds given :class:`Dataset` to the :class:`Databook`.""" diff --git a/tablib/formats/_xls.py b/tablib/formats/_xls.py index eab0aa8..67b87ea 100644 --- a/tablib/formats/_xls.py +++ b/tablib/formats/_xls.py @@ -64,6 +64,22 @@ def export_book(databook): return stream.getvalue() +def import_set(dset, in_stream, headers=True): + """Returns databook from XLS stream.""" + + dset.wipe() + + xls_book = xlrd.open_workbook(file_contents=in_stream) + sheet = xls_book.sheet_by_index(0) + + dset.title = sheet.name + + for i in xrange(sheet.nrows): + if (i == 0) and (headers): + dset.headers = sheet.row_values(0) + else: + dset.append(sheet.row_values(i)) + def import_book(dbook, in_stream, headers=True): """Returns databook from XLS stream.""" diff --git a/tablib/formats/_xlsx.py b/tablib/formats/_xlsx.py index 8aca6b7..fc0a332 100644 --- a/tablib/formats/_xlsx.py +++ b/tablib/formats/_xlsx.py @@ -12,6 +12,7 @@ else: from cStringIO import StringIO as BytesIO from tablib.compat import openpyxl +import tablib Workbook = openpyxl.workbook.Workbook ExcelWriter = openpyxl.writer.excel.ExcelWriter @@ -23,6 +24,15 @@ from tablib.compat import unicode title = 'xlsx' extensions = ('xlsx',) + +def detect(stream): + """Returns True if given stream is a readable excel file.""" + try: + openpyxl.reader.excel.load_workbook(stream) + return True + except TypeError: + pass + def export_set(dataset): """Returns XLSX representation of Dataset.""" @@ -55,6 +65,45 @@ def export_book(databook): return stream.getvalue() +def import_set(dset, in_stream, headers=True): + """Returns databook from XLS stream.""" + + dset.wipe() + + xls_book = openpyxl.reader.excel.load_workbook(in_stream) + sheet = xls_book.get_active_sheet() + + dset.title = sheet.title + + for i, row in enumerate(sheet.rows): + row_vals = [c.value for c in row] + if (i == 0) and (headers): + dset.headers = row_vals + else: + dset.append(row_vals) + + +def import_book(dbook, in_stream, headers=True): + """Returns databook from XLS stream.""" + + dbook.wipe() + + xls_book = openpyxl.reader.excel.load_workbook(in_stream) + + for sheet in xls_book.worksheets: + data = tablib.Dataset() + data.title = sheet.title + + for i, row in enumerate(sheet.rows): + row_vals = [c.value for c in row] + if (i == 0) and (headers): + data.headers = row_vals + else: + data.append(row_vals) + + dbook.add_sheet(data) + + def dset_sheet(dataset, ws): """Completes given worksheet from given Dataset.""" _package = dataset._package(dicts=False) |
