Merge pull request #33543 from iamejaaz/45517-format-date-time-in-report
feat: format date and date-time fields on export
This commit is contained in:
commit
b68efee361
1 changed files with 24 additions and 1 deletions
|
|
@ -1,11 +1,13 @@
|
|||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# License: MIT. See LICENSE
|
||||
import datetime
|
||||
import re
|
||||
from io import BytesIO
|
||||
|
||||
import openpyxl
|
||||
import xlrd
|
||||
from openpyxl import load_workbook
|
||||
from openpyxl.cell import WriteOnlyCell
|
||||
from openpyxl.styles import Font
|
||||
from openpyxl.utils import get_column_letter
|
||||
from openpyxl.workbook.child import INVALID_TITLE_REGEX
|
||||
|
|
@ -18,6 +20,16 @@ ILLEGAL_CHARACTERS_RE = re.compile(
|
|||
)
|
||||
|
||||
|
||||
def get_excel_date_format():
|
||||
date_format = frappe.get_system_settings("date_format")
|
||||
time_format = frappe.get_system_settings("time_format")
|
||||
|
||||
# Excel-compatible format
|
||||
date_format = date_format.replace("mm", "MM")
|
||||
|
||||
return date_format, time_format
|
||||
|
||||
|
||||
# return xlsx file object
|
||||
def make_xlsx(data, sheet_name, wb=None, column_widths=None):
|
||||
column_widths = column_widths or []
|
||||
|
|
@ -34,6 +46,8 @@ def make_xlsx(data, sheet_name, wb=None, column_widths=None):
|
|||
row1 = ws.row_dimensions[1]
|
||||
row1.font = Font(name="Calibri", bold=True)
|
||||
|
||||
date_format, time_format = get_excel_date_format()
|
||||
|
||||
for row in data:
|
||||
clean_row = []
|
||||
for item in row:
|
||||
|
|
@ -46,7 +60,16 @@ def make_xlsx(data, sheet_name, wb=None, column_widths=None):
|
|||
# Remove illegal characters from the string
|
||||
value = ILLEGAL_CHARACTERS_RE.sub("", value)
|
||||
|
||||
clean_row.append(value)
|
||||
if isinstance(value, datetime.date | datetime.datetime):
|
||||
number_format = date_format
|
||||
if isinstance(value, datetime.datetime):
|
||||
number_format = f"{date_format} {time_format}"
|
||||
|
||||
cell = WriteOnlyCell(ws, value=value)
|
||||
cell.number_format = number_format
|
||||
clean_row.append(cell)
|
||||
else:
|
||||
clean_row.append(value)
|
||||
|
||||
ws.append(clean_row)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue