Spaces:
Runtime error
Runtime error
| import csv | |
| import io | |
| from datetime import datetime | |
| from flask import send_file | |
| import xlsxwriter | |
| from flask import current_app | |
| def export_to_csv(data, headers): | |
| """导出数据到CSV文件""" | |
| output = io.StringIO() | |
| writer = csv.writer(output) | |
| writer.writerow(headers) | |
| for row in data: | |
| writer.writerow([row.get(header.lower().replace(' ', '_')) for header in headers]) | |
| output.seek(0) | |
| return send_file( | |
| io.BytesIO(output.getvalue().encode('utf-8')), | |
| mimetype='text/csv', | |
| as_attachment=True, | |
| download_name=f'export_{datetime.now().strftime("%Y%m%d_%H%M%S")}.csv' | |
| ) | |
| def export_to_excel(data, headers, sheet_name='Sheet1'): | |
| """导出数据到Excel文件""" | |
| try: | |
| # 创建一个内存中的Excel文件 | |
| output = io.BytesIO() | |
| workbook = xlsxwriter.Workbook(output) | |
| worksheet = workbook.add_worksheet(sheet_name) | |
| # 设置表头格式 | |
| header_format = workbook.add_format({ | |
| 'bold': True, | |
| 'align': 'center', | |
| 'valign': 'vcenter', | |
| 'fg_color': '#D7E4BC', | |
| 'border': 1 | |
| }) | |
| # 设置数据格式 | |
| data_format = workbook.add_format({ | |
| 'align': 'left', | |
| 'valign': 'vcenter', | |
| 'border': 1 | |
| }) | |
| # 写入表头 | |
| for col, header in enumerate(headers): | |
| worksheet.write(0, col, header, header_format) | |
| worksheet.set_column(col, col, 15) # 设置列宽 | |
| # 写入数据 | |
| for row, item in enumerate(data, start=1): | |
| for col, header in enumerate(headers): | |
| try: | |
| # 确保数据类型正确 | |
| value = item.get(header, '') | |
| if isinstance(value, (int, float)): | |
| worksheet.write_number(row, col, value, data_format) | |
| else: | |
| worksheet.write_string(row, col, str(value), data_format) | |
| except Exception as e: | |
| current_app.logger.error(f"Error writing cell [{row},{col}]: {str(e)}") | |
| worksheet.write_string(row, col, str(value), data_format) | |
| workbook.close() | |
| output.seek(0) | |
| # 设置响应头 | |
| response = send_file( | |
| output, | |
| mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', | |
| as_attachment=True, | |
| download_name=f'inventory_{datetime.now().strftime("%Y%m%d_%H%M%S")}.xlsx' | |
| ) | |
| # 添加CORS头 | |
| response.headers.add('Access-Control-Allow-Origin', '*') | |
| response.headers.add('Access-Control-Allow-Headers', 'Content-Type,Authorization') | |
| response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS') | |
| response.headers.add('Access-Control-Expose-Headers', 'Content-Disposition') | |
| return response | |
| except Exception as e: | |
| current_app.logger.error(f"Error in export_to_excel: {str(e)}") | |
| raise |