Source code for gaetk2.tools.structured_xls

#!/usr/bin/env python
# encoding: utf-8
"""
huTools/structured_xls.py - csv.py compatible Excel Export.

Created by Maximillian Dornseif on 2014-02-24.
Copyright (c) 2014, 2015, 2017 HUDORA. All rights reserved.
"""
import datetime
from cStringIO import StringIO

from xlwt import Workbook, XFStyle

datestyle = XFStyle()
datestyle.num_format_str = 'YYYY-MM-DD'


[docs]class XLSwriter(object): """:mod:`csv` - Module compatible Interface to generate excel files. ... but you have to call :meth:`save()` oder :meth:`getvalue()` to generate the final XLS file. :param output: *optional* File-Like Object for :func:`save` to export to. :type output: file or None :param str sheetname: *optional* Name of the single Worksheet we export to. Uses the deprecated `xlwt <https://pypi.python.org/pypi/xlwt>`_. Usage:: xlswriter = XLSwriter() xlswriter.writerow(['foo', 1, 2]) xlswriter.writerow(['bar', 3, datetime.date.today()]) xlswriter.save(open('test.xls') """ # openpyxl or xlsxwriter might be better output alternatives nowadays def __init__(self, output=None, sheetname='This Sheet'): self.book = Workbook() self.sheet = self.book.add_sheet(sheetname) self.rownum = 0 self.output = output
[docs] def writerow(self, row): """Eine Zeile schreiben. Row ist eine Liste von Werten.""" col = 0 for coldata in row: if isinstance(coldata, (datetime.datetime, datetime.date, datetime.time)): self.sheet.write(self.rownum, col, coldata, datestyle) else: if len(unicode(coldata)) > 8192: # übergroße Felder RADIKAL verkürzen self.sheet.write(self.rownum, col, "%s ..." % unicode(coldata)[:64]) else: self.sheet.write(self.rownum, col, coldata) col += 1 self.rownum += 1
[docs] def save(self, fd=None): """Write rendered XLS file to `fd` or `self.output`.""" if not fd: fd = self.output assert fd self.book.save(fd) return fd
[docs] def getvalue(self): """Returns rendered XLS file as a :class:`StringIO()`.""" fd = StringIO() self.book.save(fd) return fd.getvalue()