summaryrefslogtreecommitdiff
path: root/tablib
diff options
context:
space:
mode:
authorDaniel Velkov <dvelkov@quantcast.com>2012-06-01 11:11:15 -0700
committerDaniel Velkov <dvelkov@quantcast.com>2012-06-01 11:11:15 -0700
commit97b4401b18ed264f77072dd362ec8d7cca3f4571 (patch)
treef19168379074572a5c22a445000ba53c8fc51cef /tablib
parent40e0f41b4cdf287ab46e2ab7e568a4c5e22f2d61 (diff)
downloadtablib-97b4401b18ed264f77072dd362ec8d7cca3f4571.tar.gz
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 1fdc77c..eef470c 100644
--- a/tablib/core.py
+++ b/tablib/core.py
@@ -952,6 +952,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 ebec9e1..cf7e332 100644
--- a/tablib/formats/_xls.py
+++ b/tablib/formats/_xls.py
@@ -66,6 +66,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 9cd63b5..901ce59 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'
extentions = ('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."""
@@ -54,6 +64,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)