DavMelchi commited on
Commit
bcc0fd9
·
1 Parent(s): 46a5af8

adding formatting to excel

Browse files
Files changed (1) hide show
  1. utils/convert_to_excel.py +137 -13
utils/convert_to_excel.py CHANGED
@@ -4,26 +4,150 @@ import time
4
  import pandas as pd
5
  import streamlit as st
6
 
 
 
 
7
 
8
- @st.cache_data
9
- def convert_dfs(dfs: list[pd.DataFrame], sheet_names: list[str]) -> bytes:
10
- # IMPORTANT: Cache the conversion to prevent computation on every rerun
11
 
12
- # Create a BytesIO object
13
- bytes_io = io.BytesIO()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
 
15
- # Write the dataframes to the BytesIO object
 
 
 
 
 
 
 
 
 
 
 
 
16
  with pd.ExcelWriter(bytes_io, engine="xlsxwriter") as writer:
17
- for df, sheet_name in zip(dfs, sheet_names):
18
- df.to_excel(writer, sheet_name=sheet_name, index=True)
 
 
 
 
19
 
20
- # Get the bytes data
21
- bytes_data = bytes_io.getvalue()
22
 
23
- # Close the BytesIO object
24
- bytes_io.close()
 
25
 
26
- return bytes_data
 
 
 
 
 
 
 
 
27
 
28
 
29
  def save_dataframe(df: pd.DataFrame, sheet_name: str):
 
4
  import pandas as pd
5
  import streamlit as st
6
 
7
+ # @st.cache_data
8
+ # def convert_dfs(dfs: list[pd.DataFrame], sheet_names: list[str]) -> bytes:
9
+ # # IMPORTANT: Cache the conversion to prevent computation on every rerun
10
 
11
+ # # Create a BytesIO object
12
+ # bytes_io = io.BytesIO()
 
13
 
14
+ # # Write the dataframes to the BytesIO object
15
+ # with pd.ExcelWriter(bytes_io, engine="xlsxwriter") as writer:
16
+ # for df, sheet_name in zip(dfs, sheet_names):
17
+ # df.to_excel(writer, sheet_name=sheet_name, index=True)
18
+
19
+ # # Get the bytes data
20
+ # bytes_data = bytes_io.getvalue()
21
+
22
+ # # Close the BytesIO object
23
+ # bytes_io.close()
24
+
25
+ # return bytes_data
26
+
27
+
28
+ def get_formats(workbook):
29
+ return {
30
+ "green": workbook.add_format(
31
+ {"bg_color": "#37CC73", "bold": True, "border": 1}
32
+ ),
33
+ "blue": workbook.add_format({"bg_color": "#1A64FF", "bold": True, "border": 1}),
34
+ "blue_light": workbook.add_format(
35
+ {"bg_color": "#00B0F0", "bold": True, "border": 1}
36
+ ),
37
+ "beurre": workbook.add_format(
38
+ {"bg_color": "#FFE699", "bold": True, "border": 1}
39
+ ),
40
+ "orange": workbook.add_format(
41
+ {"bg_color": "#F47F31", "bold": True, "border": 1}
42
+ ),
43
+ "purple5": workbook.add_format(
44
+ {"bg_color": "#E03DCD", "bold": True, "border": 1}
45
+ ),
46
+ "purple6": workbook.add_format(
47
+ {"bg_color": "#AE83F8", "bold": True, "border": 1}
48
+ ),
49
+ "gray": workbook.add_format({"bg_color": "#D9D9D9", "bold": True, "border": 1}),
50
+ "red": workbook.add_format({"bg_color": "#FF0000", "bold": True, "border": 1}),
51
+ }
52
+
53
+
54
+ def get_format_map_by_format_type(formats: dict, format_type: str) -> dict:
55
+ if format_type == "GSM_Analysis":
56
+ return {
57
+ # "name": formats["blue"],
58
+ "amrSegLoadDepTchRateLower": formats["beurre"],
59
+ "amrSegLoadDepTchRateUpper": formats["beurre"],
60
+ "dedicatedGPRScapacity": formats["beurre"],
61
+ "defaultGPRScapacity": formats["beurre"],
62
+ "number_trx_per_cell": formats["blue_light"],
63
+ "number_trx_per_bcf": formats["blue_light"],
64
+ "number_tch_per_cell": formats["blue"],
65
+ "number_sd_per_cell": formats["blue"],
66
+ "number_bcch_per_cell": formats["blue"],
67
+ "number_ccch_per_cell": formats["blue"],
68
+ "number_cbc_per_cell": formats["blue"],
69
+ "number_total_channels_per_cell": formats["blue"],
70
+ "number_signals_per_cell": formats["blue"],
71
+ "hf_rate_coef": formats["purple5"],
72
+ "GPRS": formats["purple5"],
73
+ "TCH Actual HR%": formats["green"],
74
+ "Offered Traffic BH": formats["green"],
75
+ "Max_Traffic BH": formats["green"],
76
+ "Avg_Traffic BH": formats["green"],
77
+ "Max_tch_call_blocking BH": formats["green"],
78
+ "Avg_tch_call_blocking BH": formats["green"],
79
+ "number_of_days_with_tch_blocking_exceeded": formats["green"],
80
+ "Max_sdcch_real_blocking BH": formats["green"],
81
+ "Avg_sdcch_real_blocking BH": formats["green"],
82
+ "number_of_days_with_sdcch_blocking_exceeded": formats["green"],
83
+ "TCH UTILIZATION (@Max Traffic)": formats["orange"],
84
+ "Target FR CHs": formats["purple6"],
85
+ "Target HR CHs": formats["purple6"],
86
+ "Target TCHs": formats["purple6"],
87
+ "Target TRXs": formats["purple6"],
88
+ "Numberof required TRXs": formats["purple6"],
89
+ }
90
+ elif format_type == "database":
91
+ return {
92
+ "code": formats["blue"],
93
+ "Azimut": formats["green"],
94
+ "Longitude": formats["green"],
95
+ "Latitude": formats["green"],
96
+ "Hauteur": formats["green"],
97
+ }
98
+ # elif format_type == "LTE":
99
+ # return {
100
+ # "DL PRB Utilization": formats["orange"],
101
+ # "UL PRB Utilization": formats["orange"],
102
+ # "RSRP": formats["blue_light"],
103
+ # "RSRQ": formats["blue_light"],
104
+ # "Throughput (Mbps)": formats["green"],
105
+ # }
106
+ else:
107
+ return {} # No formatting if format_type not matched
108
+
109
+
110
+ def _apply_custom_formatting(
111
+ writer, df: pd.DataFrame, sheet_name: str, format_type: str
112
+ ):
113
+ workbook = writer.book
114
+ worksheet = writer.sheets[sheet_name]
115
 
116
+ formats = get_formats(workbook)
117
+ format_map = get_format_map_by_format_type(formats, format_type)
118
+
119
+ for col_idx, col_name in enumerate(df.columns):
120
+ fmt = format_map.get(col_name)
121
+ if fmt:
122
+ worksheet.write(0, col_idx + 1, col_name, fmt)
123
+
124
+
125
+ def _write_to_excel(
126
+ dfs: list[pd.DataFrame], sheet_names: list[str], index=True, format_type: str = None
127
+ ) -> bytes:
128
+ bytes_io = io.BytesIO()
129
  with pd.ExcelWriter(bytes_io, engine="xlsxwriter") as writer:
130
+ for df, name in zip(dfs, sheet_names):
131
+ # df.index.name = "index"
132
+ df.to_excel(writer, sheet_name=name, index=index)
133
+ if format_type:
134
+ _apply_custom_formatting(writer, df, name, format_type)
135
+ return bytes_io.getvalue()
136
 
 
 
137
 
138
+ @st.cache_data
139
+ def convert_dfs(dfs: list[pd.DataFrame], sheet_names: list[str]) -> bytes:
140
+ return _write_to_excel(dfs, sheet_names, index=True)
141
 
142
+
143
+ @st.cache_data
144
+ def convert_gsm_dfs(dfs, sheet_names) -> bytes:
145
+ return _write_to_excel(dfs, sheet_names, index=True, format_type="GSM_Analysis")
146
+
147
+
148
+ @st.cache_data
149
+ def convert_database_dfs(dfs, sheet_names) -> bytes:
150
+ return _write_to_excel(dfs, sheet_names, index=True, format_type="database")
151
 
152
 
153
  def save_dataframe(df: pd.DataFrame, sheet_name: str):