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")