Spaces:
Sleeping
Sleeping
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") | |