diff --git a/report_xlsx/README.rst b/report_xlsx/README.rst
new file mode 100644
index 00000000..eb3cdb24
--- /dev/null
+++ b/report_xlsx/README.rst
@@ -0,0 +1,77 @@
+.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+================
+Base report xlsx
+================
+
+This module provides a basic report class to generate xlsx report.
+
+Usage
+=====
+
+An example of XLSX report for partners:
+
+A python class ::
+
+ from openerp.addons.report_xlsx.report.report_xlsx import ReportXlsx
+
+ class partner_xlsx(ReportXlsx):
+
+ def generate_xlsx_report(self, workbook, data, partners):
+ for obj in partners:
+ report_name = obj.name
+ # One sheet by partner
+ sheet = workbook.add_worksheet(report_name[:31])
+ bold = workbook.add_format({'bold': True})
+ sheet.write(0, 0, obj.name, bold)
+
+
+ partner_xlsx('report.res.partner.xlsx',
+ 'res.partner')
+
+A report XML record ::
+
+
+
+.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
+ :alt: Try me on Runbot
+ :target: https://runbot.odoo-community.org/runbot/143/9.0
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues `_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed feedback
+`here `_.
+
+Credits
+=======
+
+Contributors
+------------
+
+* Adrien Peiffer
+
+Maintainer
+----------
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+This module is maintained by the OCA.
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.
+
+To contribute to this module, please visit https://odoo-community.org.
\ No newline at end of file
diff --git a/report_xlsx/__init__.py b/report_xlsx/__init__.py
new file mode 100644
index 00000000..9a384baf
--- /dev/null
+++ b/report_xlsx/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+# Copyright 2015 ACSONE SA/NV ()
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+from . import models
+from . import report
diff --git a/report_xlsx/__openerp__.py b/report_xlsx/__openerp__.py
new file mode 100644
index 00000000..f6576b3a
--- /dev/null
+++ b/report_xlsx/__openerp__.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+# Copyright 2015 ACSONE SA/NV ()
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+{
+ 'name': "Base report xlsx",
+
+ 'summary': """
+ Base module to create xlsx report""",
+ 'author': 'ACSONE SA/NV,'
+ 'Odoo Community Association (OCA)',
+ 'website': "http://acsone.eu",
+ 'category': 'Reporting',
+ 'version': '8.0.1.0.0',
+ 'license': 'AGPL-3',
+ 'external_dependencies': {'python': ['xlsxwriter']},
+ 'depends': [
+ 'base',
+ ],
+}
diff --git a/report_xlsx/models/__init__.py b/report_xlsx/models/__init__.py
new file mode 100644
index 00000000..521aa82b
--- /dev/null
+++ b/report_xlsx/models/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+# Copyright 2015 ACSONE SA/NV ()
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).+
+
+from . import ir_report
diff --git a/report_xlsx/models/ir_report.py b/report_xlsx/models/ir_report.py
new file mode 100644
index 00000000..37928be7
--- /dev/null
+++ b/report_xlsx/models/ir_report.py
@@ -0,0 +1,11 @@
+# -*- coding: utf-8 -*-
+# Copyright 2015 ACSONE SA/NV ()
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from openerp import api, fields, models
+
+
+class IrActionsReportXml(models.Model):
+ _inherit = 'ir.actions.report.xml'
+
+ report_type = fields.Selection(selection_add=[("xlsx", "xlsx")])
diff --git a/report_xlsx/report/__init__.py b/report_xlsx/report/__init__.py
new file mode 100644
index 00000000..37c50512
--- /dev/null
+++ b/report_xlsx/report/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Copyright 2015 ACSONE SA/NV ()
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+from . import report_xlsx
diff --git a/report_xlsx/report/report_xlsx.py b/report_xlsx/report/report_xlsx.py
new file mode 100644
index 00000000..9b96fa7d
--- /dev/null
+++ b/report_xlsx/report/report_xlsx.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+# Copyright 2015 ACSONE SA/NV ()
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from openerp.report.report_sxw import report_sxw
+from openerp.api import Environment
+from cStringIO import StringIO
+
+import logging
+_logger = logging.getLogger(__name__)
+
+try:
+ import xlsxwriter
+except ImportError:
+ _logger.debug('Can not import xlsxwriter`.')
+
+
+class ReportXlsx(report_sxw):
+
+ def create(self, cr, uid, ids, data, context=None):
+ self.env = Environment(cr, uid, context)
+ report_obj = self.env['ir.actions.report.xml']
+ report = report_obj.search([('report_name', '=', self.name[7:])])
+ if report.ids:
+ self.title = report.name
+ if report.report_type == 'xlsx':
+ objs = self.env[self.table].browse(ids)
+ return self.create_xlsx_report(data, objs)
+ return super(ReportXlsx, self).create(cr, uid, ids, data, context)
+
+ def create_xlsx_report(self, data, objs):
+ file_data = StringIO()
+ workbook = xlsxwriter.Workbook(file_data)
+ self.generate_xlsx_report(workbook, data, objs)
+ workbook.close()
+ file_data.seek(0)
+ return (file_data.read(), 'xlsx')
+
+ def generate_xlsx_report(self, workbook, data, objs):
+ raise NotImplementedError()
diff --git a/report_xlsx/static/description/icon.png b/report_xlsx/static/description/icon.png
new file mode 100644
index 00000000..3a0328b5
Binary files /dev/null and b/report_xlsx/static/description/icon.png differ