diff --git a/frappe/desk/query_report.py b/frappe/desk/query_report.py index 2c90a215dc..5d2269e1ea 100644 --- a/frappe/desk/query_report.py +++ b/frappe/desk/query_report.py @@ -129,21 +129,17 @@ def export_query(): file_format_type = data["file_format_type"] if file_format_type == "Excel": + data = run(report_name, filters) data = frappe._dict(data) - # convert to xlsx - import openpyxl - from cStringIO import StringIO - - wb = openpyxl.Workbook() - ws = wb.active - ws.append(data.columns) - for row in data.result: - ws.append(row) + columns = get_columns_dict(data.columns) + content = [] + for col in columns.values(): + content.append(col["label"]) - xlsx_file = StringIO() - wb.save(xlsx_file) + from frappe.utils.xlsxutils import make_xlsx + xlsx_file = make_xlsx([content] + data.result, "Query Report") frappe.response['filename'] = report_name + '.xlsx' frappe.response['filecontent'] = xlsx_file.getvalue() @@ -338,6 +334,7 @@ def get_columns_dict(columns): else: col_dict["fieldtype"] = col[1] + col_dict["label"] = col[0] col_dict["fieldname"] = frappe.scrub(col[0]) # dict diff --git a/frappe/desk/reportview.py b/frappe/desk/reportview.py index b0473cd378..9225b8ed92 100644 --- a/frappe/desk/reportview.py +++ b/frappe/desk/reportview.py @@ -112,13 +112,11 @@ def export_query(): for i, row in enumerate(ret): data.append([i+1] + list(row)) - - from cStringIO import StringIO - if file_format_type == "CSV": # convert to csv import csv + from cStringIO import StringIO f = StringIO() writer = csv.writer(f) @@ -133,16 +131,8 @@ def export_query(): elif file_format_type == "Excel": - # convert to xlsx - import openpyxl - - wb = openpyxl.Workbook() - ws = wb.active - for row in data: - ws.append(row) - - xlsx_file = StringIO() - wb.save(xlsx_file) + from frappe.utils.xlsxutils import make_xlsx + xlsx_file = make_xlsx(data, doctype) frappe.response['filename'] = doctype + '.xlsx' frappe.response['filecontent'] = xlsx_file.getvalue() diff --git a/frappe/utils/xlsxutils.py b/frappe/utils/xlsxutils.py new file mode 100644 index 0000000000..0d6e2e797b --- /dev/null +++ b/frappe/utils/xlsxutils.py @@ -0,0 +1,26 @@ +# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors +# MIT License. See license.txt +from __future__ import unicode_literals + +import frappe +from frappe.utils import encode, cstr, cint, flt, comma_or + +import openpyxl +from cStringIO import StringIO +from openpyxl.styles import Font + +# return xlsx file object +def make_xlsx(data, sheet_name): + + wb = openpyxl.Workbook(write_only=True) + ws = wb.create_sheet(sheet_name, 0) + + row1 = ws.row_dimensions[1] + row1.font = Font(name='Calibri',bold=True) + + for row in data: + ws.append(row) + + xlsx_file = StringIO() + wb.save(xlsx_file) + return xlsx_file \ No newline at end of file