diff options
| author | Kenneth Reitz <me@kennethreitz.com> | 2010-10-04 11:52:12 -0400 |
|---|---|---|
| committer | Kenneth Reitz <me@kennethreitz.com> | 2010-10-04 11:52:12 -0400 |
| commit | c612bb3dae663b076acdd4e6edada1b9a276f9af (patch) | |
| tree | c16861b7dbe60128e648488f70e746decbf1f991 /tablib | |
| parent | bfe70066b8a4a635de3c4ef9cdbcb51cace8152a (diff) | |
| parent | c223dfbdf12bfa9ec6458184b83ac3e458efb185 (diff) | |
| download | tablib-c612bb3dae663b076acdd4e6edada1b9a276f9af.tar.gz | |
Merge branch 'master' into develop
Diffstat (limited to 'tablib')
| -rw-r--r-- | tablib/core.py | 29 | ||||
| -rw-r--r-- | tablib/formats/_xls.py | 42 |
2 files changed, 59 insertions, 12 deletions
diff --git a/tablib/core.py b/tablib/core.py index a7a2963..90ef2b0 100644 --- a/tablib/core.py +++ b/tablib/core.py @@ -20,6 +20,9 @@ class Dataset(object): def __init__(self, *args, **kwargs): self._data = list(args) self.__headers = None + + # ('title', index) tuples + self._separators = [] try: self.headers = kwargs['headers'] @@ -33,6 +36,7 @@ class Dataset(object): self._register_formats() + def __len__(self): return self.height @@ -203,7 +207,26 @@ class Dataset(object): self._data = [tuple([row]) for row in col] - def insert(self, i, row=None, col=None): + def insert_separator(self, index, text='-'): + """Adds a separator to Dataset at given index.""" + + sep = (index, text) + self._separators.append(sep) + + + def append_separator(self, text='-'): + """Adds a separator to Dataset.""" + + # change offsets if headers are or aren't defined + if not self.headers: + index = self.height if self.height else 0 + else: + index = (self.height + 1) if self.height else 1 + + self.insert_separator(index, text) + + + def insert(self, i, row=None): """Inserts a row at given position in Dataset""" if row: self._validate(row) @@ -234,9 +257,11 @@ class Databook(object): except AttributeError: return '<databook object>' + def wipe(self): """Wipe book clean.""" self._datasets = [] + @classmethod def _register_formats(cls): @@ -258,7 +283,7 @@ class Databook(object): self._datasets.append(dataset) else: raise InvalidDatasetType - + def _package(self): """Packages Databook for delivery.""" diff --git a/tablib/formats/_xls.py b/tablib/formats/_xls.py index 1a739af..76e9318 100644 --- a/tablib/formats/_xls.py +++ b/tablib/formats/_xls.py @@ -9,7 +9,8 @@ import cStringIO title = 'xls' extentions = ('xls',) - +wrap = xlwt.easyxf("alignment: wrap on") +bold = xlwt.easyxf("font: bold on") def export_set(dataset): """Returns XLS representation of Dataset.""" @@ -17,10 +18,8 @@ def export_set(dataset): wb = xlwt.Workbook(encoding='utf8') ws = wb.add_sheet(dataset.title if dataset.title else 'Tabbed Dataset') - for i, row in enumerate(dataset._package(dicts=False)): - for j, col in enumerate(row): - ws.write(i, j, col) - + dset_sheet(dataset, ws) + stream = cStringIO.StringIO() wb.save(stream) return stream.getvalue() @@ -34,12 +33,35 @@ def export_book(databook): for i, dset in enumerate(databook._datasets): ws = wb.add_sheet(dset.title if dset.title else 'Sheet%s' % (i)) - #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) + dset_sheet(dset, ws) stream = cStringIO.StringIO() wb.save(stream) - return stream.getvalue()
\ No newline at end of file + return stream.getvalue() + + +def dset_sheet(dataset, ws): + """Completes given worksheet from given Dataset.""" + _package = dataset._package(dicts=False) + + for i, sep in enumerate(dataset._separators): + _offset = i + _package.insert((sep[0] + _offset), (sep[1],)) + + for i, row in enumerate(_package): + for j, col in enumerate(row): + + # bold headers + if (i == 0) and dataset.headers: + ws.write(i, j, col, bold) + + # bold separators + elif len(row) < dataset.width: + ws.write(i, j, col, bold) + + # wrap the rest + else: + ws.write(i, j, col, wrap) + +
\ No newline at end of file |
