From d52537b75b016a9d8128998236badd980848394f Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Wed, 8 Sep 2010 18:05:32 -0400 Subject: [PATCH] Added workbook feature for xls support. Other formats expected. --- tablib/core.py | 25 ++++++++++++++++++------- tablib/tests/tests.py | 39 +++++++++++++++++++++++++++++++-------- 2 files changed, 49 insertions(+), 15 deletions(-) diff --git a/tablib/core.py b/tablib/core.py index 9dc0400..8a9e1c2 100644 --- a/tablib/core.py +++ b/tablib/core.py @@ -14,6 +14,8 @@ import os from helpers import * from packages import simplejson as json from packages import xlwt +import random + try: import yaml @@ -205,7 +207,7 @@ class Dataset(object): class DataBook(object): """A book of Dataset objects. - Currently, this exists only for excel workbook support. + Currently, this exists only for XLS workbook support. """ def __init__(self): @@ -219,11 +221,6 @@ class DataBook(object): else: raise InvalidDatasetType - - def export(self): - pass - - @property def size(self): """The number of the Datasets within DataBook.""" @@ -232,7 +229,21 @@ class DataBook(object): @property def xls(self): - pass + """Returns XLS representation of DataBook.""" + + stream = cStringIO.StringIO() + wb = xlwt.Workbook() + + for dset in self._datasets: + ws = wb.add_sheet(dset.title if dset.title else 'Tabbed Dataset %s' % (int(random.random() * 100000000))) + + #for row in self._package(dicts=False): + for i, row in enumerate(dset._package(dicts=False)): + for j, col in enumerate(row): + ws.write(i, j, col) + + wb.save(stream) + return stream.getvalue() diff --git a/tablib/tests/tests.py b/tablib/tests/tests.py index 55fa083..42b6110 100644 --- a/tablib/tests/tests.py +++ b/tablib/tests/tests.py @@ -10,17 +10,40 @@ data = [ data = tablib.Dataset(*data, headers=headers) -#print data[1] -data.append(['kenneth' ,'reitz', 4.3]) +data.append(['Kenneth' ,'Reitz', 4.3]) +#print '***WITH HEADERS***' -#print data.digest() +#print 'First Names:\n', +#print data['first_name'] +#print '\nYAML:' #print data.yaml +# +#print 'JSON:' #print data.json +# +#print '\nCSV:' +#print data.csv +# +# +#print '***AND WITHOUT HEADERS***' +# +#data.headers = None +# +#print '\nYAML:' +#print data.yaml +# +#print 'JSON:' +#print data.json +# +#print '\nCSV:' +#print data.csv + +book = tablib.DataBook() +book.add_book(data) +book.add_book(data) + +print book.xls + -data.headers = None -print data.csv -#print len(data.xls) -print data.yaml -print data.json \ No newline at end of file