openerp-dev-web team mailing list archive
-
openerp-dev-web team
-
Mailing list archive
-
Message #03187
lp:~openerp-groupes/openobject-client-web/trunk_export_to_excel into lp:openobject-client-web
Julien Thewys (OpenERP) has proposed merging lp:~openerp-groupes/openobject-client-web/trunk_export_to_excel into lp:openobject-client-web.
Requested reviews:
OpenERP SA's Web Client R&D (openerp-dev-web)
For more details, see:
https://code.launchpad.net/~openerp-groupes/openobject-client-web/trunk_export_to_excel/+merge/50289
Re-adds simple export to Excel (.xls) facility.
CSV is not for everyone (usability issue).
--
https://code.launchpad.net/~openerp-groupes/openobject-client-web/trunk_export_to_excel/+merge/50289
Your team OpenERP SA's Web Client R&D is requested to review the proposed merge of lp:~openerp-groupes/openobject-client-web/trunk_export_to_excel into lp:openobject-client-web.
=== modified file 'addons/openerp/controllers/impex.py'
--- addons/openerp/controllers/impex.py 2011-02-16 08:46:07 +0000
+++ addons/openerp/controllers/impex.py 2011-02-18 09:28:03 +0000
@@ -20,6 +20,7 @@
###############################################################################
import StringIO
import csv
+import re
import xml.dom.minidom
import cherrypy
@@ -64,6 +65,33 @@
except IOError, (errno, strerror):
raise common.message(_("Operation failed\nI/O error")+"(%s)" % (errno,))
+def export_xls(fieldnames, table):
+ try:
+ import xlwt
+ except ImportError, e:
+ raise common.warning(_('Please install xlwt library to export to MS Excel.'), _('Import Error.'))
+
+ workbook = xlwt.Workbook()
+ worksheet = workbook.add_sheet('Sheet 1')
+
+ for i, fieldname in enumerate(fieldnames):
+ worksheet.write(0, i, ustr(fieldname))
+ worksheet.col(i).width = 8000 # around 220 pixels
+
+ style = xlwt.easyxf('align: wrap yes')
+
+ for row_index, row in enumerate(table):
+ for cell_index, cell_value in enumerate(row):
+ cell_value = ustr(cell_value)
+ cell_value = re.sub("\r", " ", cell_value)
+ worksheet.write(row_index + 1, cell_index, cell_value, style)
+
+ fp = StringIO.StringIO()
+ workbook.save(fp)
+ fp.seek(0)
+ data = fp.read()
+ return data
+
def _fields_get_all(model, views, context=None):
context = context or {}
@@ -352,7 +380,7 @@
return rec(fields)
@expose(content_type="application/octet-stream")
- def export_data(self, fname, fields, import_compat=False, **kw):
+ def export_data(self, fname, fields, import_compat=False, export_format='csv', **kw):
params, data_index = TinyDict.split(kw)
proxy = rpc.RPCProxy(params.model)
@@ -383,7 +411,10 @@
if import_compat:
params.fields2 = flds
- return export_csv(params.fields2, result)
+ if export_format == 'xls':
+ return export_xls(params.fields2, result)
+ else:
+ return export_csv(params.fields2, result)
@expose(template="/openerp/controllers/templates/imp.mako")
def imp(self, error=None, records=None, success=None, **kw):
=== modified file 'addons/openerp/controllers/templates/exp.mako'
--- addons/openerp/controllers/templates/exp.mako 2011-01-17 13:17:07 +0000
+++ addons/openerp/controllers/templates/exp.mako 2011-02-18 09:28:03 +0000
@@ -120,7 +120,7 @@
});
openobject.dom.get('_terp_fields2').value = '[' + fields2.join(',') + ']';
jQuery(idSelector(form)).attr('action', openobject.http.getURL(
- '/openerp/impex/export_data/data.csv')
+ '/openerp/impex/export_data/data.' + openobject.dom.get('export_format').value)
).submit();
}
@@ -178,6 +178,23 @@
</tr>
<tr>
<td class="side_spacing">
+ <fieldset>
+ <legend>${_("Options")}</legend>
+ <table>
+ <tr>
+ <td>
+ <select id="export_format" name="export_format">
+ <option value="csv">${_("Export to CSV")}</option>
+ <option value="xls">${_("Export to Excel")}</option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </td>
+ </tr>
+ <tr>
+ <td class="side_spacing">
<table class="fields-selector-export" cellspacing="5" border="0">
<tr>
<th class="fields-selector-left">${_("Available fields")}</th>