67 lines
1.7 KiB
Python
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
|