25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 
 
 

86 satır
1.8 KiB

  1. # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
  2. # MIT License. See license.txt
  3. from __future__ import unicode_literals
  4. import frappe
  5. from frappe.utils import encode, cstr, cint, flt, comma_or
  6. import openpyxl
  7. from openpyxl.styles import Font
  8. from openpyxl import load_workbook
  9. from six import StringIO, string_types
  10. # return xlsx file object
  11. def make_xlsx(data, sheet_name, wb=None):
  12. if wb is None:
  13. wb = openpyxl.Workbook(write_only=True)
  14. ws = wb.create_sheet(sheet_name, 0)
  15. row1 = ws.row_dimensions[1]
  16. row1.font = Font(name='Calibri',bold=True)
  17. for row in data:
  18. clean_row = []
  19. for item in row:
  20. if isinstance(item, string_types) and sheet_name != "Data Import Template":
  21. value = handle_html(item)
  22. else:
  23. value = item
  24. clean_row.append(value)
  25. ws.append(clean_row)
  26. xlsx_file = StringIO()
  27. wb.save(xlsx_file)
  28. return xlsx_file
  29. def handle_html(data):
  30. # return if no html tags found
  31. if '<' not in data:
  32. return data
  33. if '>' not in data:
  34. return data
  35. from html2text import unescape, HTML2Text
  36. h = HTML2Text()
  37. h.unicode_snob = True
  38. h = h.unescape(data or "")
  39. obj = HTML2Text()
  40. obj.ignore_links = True
  41. obj.body_width = 0
  42. value = obj.handle(h)
  43. value = value.split('\n', 1)
  44. value = value[0].split('# ',1)
  45. if len(value) < 2:
  46. return value[0]
  47. else:
  48. return value[1]
  49. def read_xlsx_file_from_attached_file(file_id=None, fcontent=None):
  50. if file_id:
  51. from frappe.utils.file_manager import get_file_path
  52. filename = get_file_path(file_id)
  53. elif fcontent:
  54. from io import BytesIO
  55. filename = BytesIO(fcontent)
  56. else:
  57. return
  58. rows = []
  59. wb1 = load_workbook(filename=filename, read_only=True)
  60. ws1 = wb1.active
  61. for row in ws1.iter_rows():
  62. tmp_list = []
  63. for cell in row:
  64. tmp_list.append(cell.value)
  65. rows.append(tmp_list)
  66. return rows