From 877c7bb61b5ba1c99b2b3792e5313643061b621b Mon Sep 17 00:00:00 2001 From: Cristian Salamea Date: Sun, 16 Jun 2013 00:49:46 -0500 Subject: [PATCH] [IMP] float field as float cell in XLS --- web_export_view/controllers.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/web_export_view/controllers.py b/web_export_view/controllers.py index ba7f4e1d..c2b78757 100644 --- a/web_export_view/controllers.py +++ b/web_export_view/controllers.py @@ -18,6 +18,10 @@ # along with this program. If not, see . # ############################################################################## +import re +import xlwt +from cStringIO import StringIO + try: import json except ImportError: @@ -31,6 +35,33 @@ from web.controllers.main import ExcelExport class ExcelExportView(ExcelExport): _cp_path = '/web/export/xls_view' + def from_data(self, fields, rows): + workbook = xlwt.Workbook() + worksheet = workbook.add_sheet('Sheet 1') + + for i, fieldname in enumerate(fields): + worksheet.write(0, i, fieldname) + worksheet.col(i).width = 8000 # around 220 pixels + + style = xlwt.easyxf('align: wrap yes') + + for row_index, row in enumerate(rows): + for cell_index, cell_value in enumerate(row): + if isinstance(cell_value, basestring): + cell_value = re.sub("\r", " ", cell_value) + if re.match('^[\d,]+(\.\d+)?$', cell_value): + cell_value = float(cell_value.replace(',','')) + style = xlwt.easyxf(num_format_str='#,##0.00') + if cell_value is False: cell_value = None + worksheet.write(row_index + 1, cell_index, cell_value, style) + + fp = StringIO() + workbook.save(fp) + fp.seek(0) + data = fp.read() + fp.close() + return data + @openerpweb.httprequest def index(self, req, data, token): data = json.loads(data)