Spaces:
Sleeping
Sleeping
File size: 2,391 Bytes
22481bd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
import os
import pandas as pd
from io import BytesIO
from openpyxl import load_workbook
from application.utils import logger
logger = logger.get_logger()
def export_results_to_excel(results: dict, sheet_name: str, filename: str = "output.xlsx", column: str = None) -> BytesIO:
try:
if not results:
logger.error("Results object is None or empty.")
return None
filename = filename if filename.endswith(".xlsx") else f"{filename}.xlsx"
data = results.get(column, {})
logger.info(f"Exporting data for column '{column}' to {filename}")
if not isinstance(data, dict):
logger.error(f"Expected dictionary for column '{column}', but got {type(data)}")
return None
df = pd.DataFrame(data.items(), columns=[column, "Value"])
df.fillna(0, inplace=True)
os.makedirs("data", exist_ok=True)
physical_path = os.path.join("data", filename)
file_exists = os.path.exists(physical_path)
start_row = 0
start_column = 0
if file_exists:
book = load_workbook(physical_path)
if sheet_name in book.sheetnames:
sheet = book[sheet_name]
start_row = sheet.max_row
start_column = sheet.max_column
else:
start_row = 0
if file_exists:
with pd.ExcelWriter(physical_path, engine='openpyxl', mode='a', if_sheet_exists='overlay') as writer:
df.to_excel(writer, sheet_name=sheet_name, index=False, header=True, startrow=0, startcol=start_column)
else:
with pd.ExcelWriter(physical_path, engine='openpyxl', mode='w') as writer:
df.to_excel(writer, sheet_name=sheet_name, index=False, header=True, startrow=0)
output_stream = BytesIO()
with pd.ExcelWriter(output_stream, engine='openpyxl') as writer:
df.to_excel(writer, sheet_name=sheet_name, index=False)
output_stream.seek(0)
logger.info(f"Data exported to {filename} successfully.")
return output_stream
except Exception as e:
logger.error(f"Error creating Excel export: {e}")
return None
# export_results_to_excel(zalando_data, "Zalando Data","test", "Greenhouse Gas (GHG) Protocol Parameters")
|