summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Reitz <me@kennethreitz.com>2012-05-16 12:13:57 -0700
committerKenneth Reitz <me@kennethreitz.com>2012-05-16 12:13:57 -0700
commit40e0f41b4cdf287ab46e2ab7e568a4c5e22f2d61 (patch)
tree2244112fca923e18bae96fcabec42b89f8c85b66
parente8c923d7121da21cb96eedd68710c37f5c9b471f (diff)
parent39435727ba79c0023056f45ca7c36d7c72bfb802 (diff)
downloadtablib-40e0f41b4cdf287ab46e2ab7e568a4c5e22f2d61.tar.gz
Merge pull request #72 from xando/develop
import_book method for xls format implemented
-rw-r--r--tablib/__init__.py2
-rw-r--r--tablib/core.py13
-rw-r--r--tablib/formats/_xls.py20
3 files changed, 34 insertions, 1 deletions
diff --git a/tablib/__init__.py b/tablib/__init__.py
index ec8467e..65d1e13 100644
--- a/tablib/__init__.py
+++ b/tablib/__init__.py
@@ -1,7 +1,7 @@
""" Tablib. """
from tablib.core import (
- Databook, Dataset, detect, import_set,
+ Databook, Dataset, detect, import_set, import_book,
InvalidDatasetType, InvalidDimensions, UnsupportedFormat,
__version__
)
diff --git a/tablib/core.py b/tablib/core.py
index c52671e..1fdc77c 100644
--- a/tablib/core.py
+++ b/tablib/core.py
@@ -1008,6 +1008,19 @@ def import_set(stream):
return None
+def import_book(stream):
+ """Return dataset of given stream."""
+ (format, stream) = detect(stream)
+
+ try:
+ databook = Databook()
+ format.import_book(databook, stream)
+ return databook
+
+ except AttributeError:
+ return None
+
+
class InvalidDatasetType(Exception):
"Only Datasets can be added to a DataBook"
diff --git a/tablib/formats/_xls.py b/tablib/formats/_xls.py
index 6530d91..ebec9e1 100644
--- a/tablib/formats/_xls.py
+++ b/tablib/formats/_xls.py
@@ -66,6 +66,26 @@ def export_book(databook):
return stream.getvalue()
+def import_book(dbook, in_stream, headers=True):
+ """Returns databook from XLS stream."""
+
+ dbook.wipe()
+
+ xls_book = xlrd.open_workbook(file_contents=in_stream)
+
+ for sheet in xls_book.sheets():
+ data = tablib.Dataset()
+ data.title = sheet.name
+
+ for i in xrange(sheet.nrows):
+ if (i == 0) and (headers):
+ data.headers = sheet.row_values(0)
+ else:
+ data.append(sheet.row_values(i))
+
+ dbook.add_sheet(data)
+
+
def dset_sheet(dataset, ws):
"""Completes given worksheet from given Dataset."""
_package = dataset._package(dicts=False)