summaryrefslogtreecommitdiff
path: root/tablib
diff options
context:
space:
mode:
authorKenneth Reitz <me@kennethreitz.org>2014-01-08 11:46:50 -0800
committerKenneth Reitz <me@kennethreitz.org>2014-01-08 11:46:50 -0800
commitc74357cb20b1ac4e7496eaf6d05a5714317d4b5f (patch)
tree454e55f5a91a2f28b1c37f4850993a94d70d1ffc /tablib
parent939b0af551aabc345568d7b439fa97684604ae48 (diff)
parent97b4401b18ed264f77072dd362ec8d7cca3f4571 (diff)
downloadtablib-c74357cb20b1ac4e7496eaf6d05a5714317d4b5f.tar.gz
Merge pull request #76 from djv/develop
xls and xlsx import support
Diffstat (limited to 'tablib')
-rw-r--r--tablib/core.py2
-rw-r--r--tablib/formats/_xls.py16
-rw-r--r--tablib/formats/_xlsx.py49
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)