Пример #1
0
    def run(self, tableObj):

        # Import openpyxl "lazy" to prevent global dependency
        from openpyxl.workbook import Workbook
        from openpyxl.writer.dump_worksheet import ExcelDumpWriter

        wb = Workbook(optimized_write=True)
        ws = wb.create_sheet()

        ws.append(
            ([""] if tableObj.rowNamesRequired else []) +
            map(unicode, list(tableObj.getColumns())))  # write column names

        for row in tableObj.getRows():
            values = [unicode(row)] if tableObj.rowNamesRequired else []
            values += [
                tableObj.getValue(row, column)
                for column in tableObj.getColumns()
            ]
            ws.append(values)
        writer = ExcelDumpWriter(wb)
        # need to do a little bit more work here, since the openpyxl library only supports writing to a filename, while we need a buffer here..
        #buffer = StringIO()
        buffer = io.BytesIO()
        zf = zipfile.ZipFile(buffer, 'w', zipfile.ZIP_DEFLATED)
        writer.write_data(zf)
        zf.close()
        buffer.flush()
        return buffer.getvalue()
Пример #2
0
    def to_bytes(self, table, **kargs):
        # Import openpyxl "lazy" to prevent global dependency
        def val(x):
            return x if x is None else unicode(x)
        
        from openpyxl.workbook import Workbook
        from openpyxl.writer.dump_worksheet import ExcelDumpWriter

        wb = Workbook(optimized_write = True)
        ws = wb.create_sheet()


        cols =  list(table.getColumns())
        ws.append([val(col) for col in  cols])
        
        for row in table.getRows():
            ws.append([val(table.getValue(row, col)) for col in cols])

        writer = ExcelDumpWriter(wb)
        # need to do a little bit more work here, since the openpyxl library only supports writing to a filename, while we need a buffer here..
        # (and we can't stream directly as zipfile needs a seekable buffer)
        stream = StringIO()
        zf = zipfile.ZipFile(stream, 'w', zipfile.ZIP_DEFLATED)
        writer.write_data(zf)
        zf.close()
        return stream.getvalue()
Пример #3
0
    def to_bytes(self, table, **kargs):
        # Import openpyxl "lazy" to prevent global dependency
        def val(x):
            return x if x is None else unicode(x)

        from openpyxl.workbook import Workbook
        from openpyxl.writer.dump_worksheet import ExcelDumpWriter

        wb = Workbook(optimized_write=True)
        ws = wb.create_sheet()

        cols = list(table.getColumns())
        ws.append([val(col) for col in cols])

        for row in table.getRows():
            ws.append([val(table.getValue(row, col)) for col in cols])

        writer = ExcelDumpWriter(wb)
        # need to do a little bit more work here, since the openpyxl library only supports writing to a filename, while we need a buffer here..
        # (and we can't stream directly as zipfile needs a seekable buffer)
        stream = StringIO()
        zf = zipfile.ZipFile(stream, "w", zipfile.ZIP_DEFLATED)
        writer.write_data(zf)
        zf.close()
        return stream.getvalue()
Пример #4
0
    def _save_virtual_workbook(self):
        """
        Return an in-memory workbook, suitable for a Django response.

        NOTE: Fixes openpyxl.writer.excel.save_virtual_workbook() for
        optimized workbooks. Package function uses ExcelWriter instead of
        ExcelDumpWriter with no way of specifying it.
        Had to copy the function and change which Writer it used.
        """
        writer = ExcelDumpWriter(self.workbook)
        temp_buffer = BytesIO()
        try:
            archive = ZipFile(temp_buffer, 'w', ZIP_DEFLATED)
            writer.write_data(archive)
        finally:
            archive.close()
        virtual_workbook = temp_buffer.getvalue()
        temp_buffer.close()
        return virtual_workbook
Пример #5
0
    def _save_virtual_workbook(self):
        """
        Return an in-memory workbook, suitable for a Django response.

        NOTE: Fixes openpyxl.writer.excel.save_virtual_workbook() for
        optimized workbooks. Package function uses ExcelWriter instead of
        ExcelDumpWriter with no way of specifying it.
        Had to copy the function and change which Writer it used.
        """
        writer = ExcelDumpWriter(self.workbook)
        temp_buffer = BytesIO()
        try:
            archive = ZipFile(temp_buffer, 'w', ZIP_DEFLATED)
            writer.write_data(archive)
        finally:
            archive.close()
        virtual_workbook = temp_buffer.getvalue()
        temp_buffer.close()
        return virtual_workbook
Пример #6
0
    def to_bytes(self, table, **kargs):
        wb = Workbook(optimized_write=True)
        ws = wb.create_sheet()

        # Determine columns. We may need an extra (first) column which 'names' the row
        columns = list(map(unicode, list(table.getColumns())))
        if table.rowNamesRequired:
            columns.insert(0, u"")
        ws.append(columns)

        # Write rows to worksheet
        for row in table.getRows():
            ws.append(tuple(_get_values(table, row)))
        writer = ExcelDumpWriter(wb)

        # Need to do a little bit more work here, since the openpyxl library only
        # supports writing to a filename, while we need a buffer here..
        buffer = io.BytesIO()
        with zipfile.ZipFile(buffer, 'w', zipfile.ZIP_DEFLATED) as zf:
            writer.write_data(zf)
        return buffer.getvalue()
Пример #7
0
    def to_bytes(self, table, **kargs):
        wb = Workbook(optimized_write=True)
        ws = wb.create_sheet()

        # Determine columns. We may need an extra (first) column which 'names' the row
        columns = list(map(unicode, list(table.getColumns())))
        if table.rowNamesRequired:
            columns.insert(0, u"")
        ws.append(columns)

        # Write rows to worksheet
        for row in table.getRows():
            ws.append(tuple(_get_values(table, row)))
        writer = ExcelDumpWriter(wb)

        # Need to do a little bit more work here, since the openpyxl library only
        # supports writing to a filename, while we need a buffer here..
        buffer = io.BytesIO()
        with zipfile.ZipFile(buffer, 'w', zipfile.ZIP_DEFLATED) as zf:
            writer.write_data(zf)
        return buffer.getvalue()
Пример #8
0
    def to_bytes(self, table, **kargs):
        # Import openpyxl "lazy" to prevent global dependency
        from openpyxl.workbook import Workbook
        from openpyxl.writer.dump_worksheet import ExcelDumpWriter

        wb = Workbook(optimized_write = True)
        ws = wb.create_sheet()
        
        ws.append(([""] if table.rowNamesRequired else []) + map(unicode, list(table.getColumns()))) # write column names
        
        for row in table.getRows():
            values = [unicode(row)] if table.rowNamesRequired else []
            values += [table.getValue(row, column) for column in table.getColumns()]
            ws.append(values)
        writer = ExcelDumpWriter(wb)
        # need to do a little bit more work here, since the openpyxl library only supports writing to a filename, while we need a buffer here..
        #buffer = StringIO()
        buffer = io.BytesIO()
        zf = zipfile.ZipFile(buffer, 'w', zipfile.ZIP_DEFLATED)
        writer.write_data(zf)
        zf.close()
        buffer.flush()
        return buffer.getvalue()