~openerp-dev/openobject-client-web/trunk-bug-714557-vda

« back to all changes in this revision

Viewing changes to addons/openerp/controllers/impex.py

  • Committer: Xavier Morel
  • Date: 2011-02-21 14:45:50 UTC
  • mfrom: (4588.1.1 trunk)
  • Revision ID: xmo@openerp.com-20110221144550-p5myvnpmwui3z3an
[ADD] reintroduce excel export for usage simplicity re. OpenOffice and Excel users

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
###############################################################################
21
21
import StringIO
22
22
import csv
 
23
import re
23
24
import xml.dom.minidom
24
25
import cherrypy
25
26
 
64
65
    except IOError, (errno, strerror):
65
66
        raise common.message(_("Operation failed\nI/O error")+"(%s)" % (errno,))
66
67
 
 
68
def export_xls(fieldnames, table):
 
69
    try:
 
70
        import xlwt
 
71
    except ImportError:
 
72
        common.error(_('Import Error.'), _('Please install xlwt library to export to MS Excel.'))
 
73
 
 
74
    workbook = xlwt.Workbook()
 
75
    worksheet = workbook.add_sheet('Sheet 1')
 
76
 
 
77
    for i, fieldname in enumerate(fieldnames):
 
78
        worksheet.write(0, i, ustr(fieldname))
 
79
        worksheet.col(i).width = 8000 # around 220 pixels
 
80
 
 
81
    style = xlwt.easyxf('align: wrap yes')
 
82
 
 
83
    for row_index, row in enumerate(table):
 
84
        for cell_index, cell_value in enumerate(row):
 
85
            cell_value = ustr(cell_value)
 
86
            cell_value = re.sub("\r", " ", cell_value)
 
87
            worksheet.write(row_index + 1, cell_index, cell_value, style)
 
88
 
 
89
    fp = StringIO.StringIO()
 
90
    workbook.save(fp)
 
91
    fp.seek(0)
 
92
    data = fp.read()
 
93
    return data
 
94
 
67
95
def _fields_get_all(model, views, context=None):
68
96
 
69
97
    context = context or {}
352
380
        return rec(fields)
353
381
 
354
382
    @expose(content_type="application/octet-stream")
355
 
    def export_data(self, fname, fields, import_compat=False, **kw):
 
383
    def export_data(self, fname, fields, import_compat=False, export_format='csv', **kw):
356
384
 
357
385
        params, data_index = TinyDict.split(kw)
358
386
        proxy = rpc.RPCProxy(params.model)
383
411
        if import_compat:
384
412
            params.fields2 = flds
385
413
 
386
 
        return export_csv(params.fields2, result)
 
414
        if export_format == 'xls':
 
415
            return export_xls(params.fields2, result)
 
416
        else:
 
417
            return export_csv(params.fields2, result)
387
418
 
388
419
    @expose(template="/openerp/controllers/templates/imp.mako")
389
420
    def imp(self, error=None, records=None, success=None, **kw):