summaryrefslogtreecommitdiff
path: root/tablib/formats/_xlsx.py
diff options
context:
space:
mode:
authorMark Rogers <mark.rogers@medtelligent.com>2011-05-12 15:12:46 -0500
committerMark Rogers <mark.rogers@medtelligent.com>2011-05-12 15:12:46 -0500
commit87ce64d4c859efb7c3d37b1e715fa04a0c1cc631 (patch)
treeaef3110841c190f46299e140640d2d535a46ff31 /tablib/formats/_xlsx.py
parent865ce6278296cb0998e5544bdfa4e4e8983d7bb2 (diff)
downloadtablib-87ce64d4c859efb7c3d37b1e715fa04a0c1cc631.tar.gz
Merely a proof of concept, soon to be tidied up
Diffstat (limited to 'tablib/formats/_xlsx.py')
-rw-r--r--tablib/formats/_xlsx.py104
1 files changed, 104 insertions, 0 deletions
diff --git a/tablib/formats/_xlsx.py b/tablib/formats/_xlsx.py
new file mode 100644
index 0000000..92e33f9
--- /dev/null
+++ b/tablib/formats/_xlsx.py
@@ -0,0 +1,104 @@
+# -*- coding: utf-8 -*-
+
+""" Tablib - XLSX Support.
+"""
+
+import sys
+
+
+if sys.version_info[0] > 2:
+ from io import BytesIO
+ import tablib.packages.xlwt3 as xlwt
+
+else:
+ from cStringIO import StringIO as BytesIO
+ import tablib.packages.xlwt as xlwt
+
+from tablib.packages.openpyxl.workbook import Workbook
+from tablib.packages.openpyxl.writer.excel import ExcelWriter
+
+from tablib.packages.openpyxl.cell import get_column_letter
+
+
+
+title = 'xlsx'
+extentions = ('xlsx',)
+
+# special styles
+#wrap = xlwt.easyxf("alignment: wrap on")
+#bold = xlwt.easyxf("font: bold on")
+
+
+def export_set(dataset):
+ """Returns XLS representation of Dataset."""
+
+ wb = Workbook()
+ ws = wb.worksheets[0]
+ ws.title = dataset.title if dataset.title else 'Tablib Dataset'
+
+ dset_sheet(dataset, ws)
+
+ stream = BytesIO()
+ wb.save(stream)
+ return stream.getvalue()
+
+
+def export_book(databook):
+ """Returns XLS representation of DataBook."""
+
+ wb = Workbook()
+ ew = ExcelWriter(workbook = wb)
+ for i, dset in enumerate(databook._datasets):
+ ws = wb.add_sheet()
+ ws.title = dset.title if dset.title else 'Sheet%s' % (i)
+
+ dset_sheet(dset, ws)
+
+
+ stream = BytesIO()
+ ew.save(filename='test.xlsx')
+ 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):
+ row_number = i + 1
+ for j, col in enumerate(row):
+ col_idx = get_column_letter(j + 1)
+
+ # bold headers
+ if (row_number == 1) and dataset.headers:
+ ws.cell('%s%s'%(col_idx, row_number)).value = '%s' % col
+ #ws.write(i, j, col, bold)
+
+ # frozen header row
+ #ws.panes_frozen = True
+ #ws.horz_split_pos = 1
+
+
+ # bold separators
+ elif len(row) < dataset.width:
+ ws.cell('%s%s'%(col_idx, row_number)).value = '%s' % col
+ #ws.write(i, j, col, bold)
+
+ # wrap the rest
+ else:
+ try:
+ if '\n' in col:
+ ws.cell('%s%s'%(col_idx, row_number)).value = '%s' % col
+ #ws.write(i, j, col, wrap)
+ else:
+ ws.cell('%s%s'%(col_idx, row_number)).value = '%s' % col
+ #ws.write(i, j, col)
+ except TypeError:
+ ws.cell('%s%s'%(col_idx, row_number)).value = '%s' % col
+ #ws.write(i, j, col)
+
+