haikal/haikalbot/utils/export.py
Marwan Alwali 56cfbad80e update
2025-05-29 21:42:27 +03:00

67 lines
1.7 KiB
Python

from django.http import HttpResponse
import pandas as pd
from io import BytesIO, StringIO
def export_to_excel(self, data, filename):
"""
Export data to Excel format.
Args:
data: Data to export
filename: Base filename without extension
Returns:
HttpResponse: Response with Excel file
"""
# Convert data to DataFrame
df = pd.DataFrame(data)
# Create Excel file in memory
excel_file = BytesIO()
with pd.ExcelWriter(excel_file, engine='xlsxwriter') as writer:
df.to_excel(writer, sheet_name='Model Analysis', index=False)
# Auto-adjust columns width
worksheet = writer.sheets['Model Analysis']
for i, col in enumerate(df.columns):
max_width = max(df[col].astype(str).map(len).max(), len(col)) + 2
worksheet.set_column(i, i, max_width)
# Set up response
excel_file.seek(0)
response = HttpResponse(
excel_file.read(),
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
)
response['Content-Disposition'] = f'attachment; filename="{filename}.xlsx"'
return response
def export_to_csv(self, data, filename):
"""
Export data to CSV format.
Args:
data: Data to export
filename: Base filename without extension
Returns:
HttpResponse: Response with CSV file
"""
# Convert data to DataFrame
df = pd.DataFrame(data)
# Create CSV file in memory
csv_file = StringIO()
df.to_csv(csv_file, index=False)
# Set up response
response = HttpResponse(csv_file.getvalue(), content_type='text/csv')
response['Content-Disposition'] = f'attachment; filename="{filename}.csv"'
return response