|
- # 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 openpyxl.styles import Font
- from openpyxl import load_workbook
- from six import StringIO, string_types
-
-
- # return xlsx file object
- def make_xlsx(data, sheet_name, wb=None):
-
- if wb is None:
- 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:
- clean_row = []
- for item in row:
- if isinstance(item, string_types) and sheet_name != "Data Import Template":
- value = handle_html(item)
- else:
- value = item
-
- clean_row.append(value)
-
- ws.append(clean_row)
-
- xlsx_file = StringIO()
- wb.save(xlsx_file)
- return xlsx_file
-
-
- def handle_html(data):
- # return if no html tags found
- if '<' not in data:
- return data
- if '>' not in data:
- return data
-
- from html2text import unescape, HTML2Text
-
- h = HTML2Text()
- h.unicode_snob = True
- h = h.unescape(data or "")
-
- obj = HTML2Text()
- obj.ignore_links = True
- obj.body_width = 0
- value = obj.handle(h)
- value = value.split('\n', 1)
- value = value[0].split('# ',1)
- if len(value) < 2:
- return value[0]
- else:
- return value[1]
-
-
- def read_xlsx_file_from_attached_file(file_id=None, fcontent=None):
- if file_id:
- from frappe.utils.file_manager import get_file_path
- filename = get_file_path(file_id)
- elif fcontent:
- from io import BytesIO
- filename = BytesIO(fcontent)
- else:
- return
-
- rows = []
- wb1 = load_workbook(filename=filename, read_only=True)
- ws1 = wb1.active
- for row in ws1.iter_rows():
- tmp_list = []
- for cell in row:
- tmp_list.append(cell.value)
- rows.append(tmp_list)
- return rows
|