feat: format date and datetime fields on export

This commit is contained in:
Ejaaz Khan 2025-08-05 17:07:47 +05:30
parent 873d020ced
commit 0e880ac318

View file

@ -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,11 @@ ILLEGAL_CHARACTERS_RE = re.compile(
)
def get_excel_date_format():
frappe_format = frappe.get_system_settings("date_format") or "yyyy-mm-dd"
return frappe_format.upper().replace("YYYY", "yyyy").replace("DD", "dd").replace("MM", "mm")
# return xlsx file object
def make_xlsx(data, sheet_name, wb=None, column_widths=None):
column_widths = column_widths or []
@ -34,6 +41,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 = get_excel_date_format()
for row in data:
clean_row = []
for item in row:
@ -46,7 +55,15 @@ 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):
if isinstance(value, datetime.datetime):
date_format += " HH:MM:SS"
cell = WriteOnlyCell(ws, value=value)
cell.number_format = date_format
clean_row.append(cell)
else:
clean_row.append(value)
ws.append(clean_row)