From 4035dc05889a7a81a8010f32aa754442c9cbcbd5 Mon Sep 17 00:00:00 2001 From: gigi mamaladze Date: Sun, 4 Jan 2026 13:38:21 +0400 Subject: [PATCH] Updated Scripts --- .../Amazon CDW5_IP Addresses_Local.xlsx | Bin 0 -> 23926 bytes ...zon CDW5_IP Addresses_Local_formatted.xlsx | Bin 0 -> 8673 bytes Additional/format.py | 232 ++++++++++++++++++ Additional/test_output.xlsx | Bin 0 -> 8673 bytes ...zon CDW5_IP Addresses_Local_formatted.xlsx | Bin 0 -> 165 bytes 5 files changed, 232 insertions(+) create mode 100644 Additional/Amazon CDW5_IP Addresses_Local.xlsx create mode 100644 Additional/Amazon CDW5_IP Addresses_Local_formatted.xlsx create mode 100644 Additional/format.py create mode 100644 Additional/test_output.xlsx create mode 100644 Additional/~$Amazon CDW5_IP Addresses_Local_formatted.xlsx diff --git a/Additional/Amazon CDW5_IP Addresses_Local.xlsx b/Additional/Amazon CDW5_IP Addresses_Local.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..bec4a2c4004bbab48f915b656464882c2bd4ce65 GIT binary patch literal 23926 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 literal 0 HcmV?d00001 diff --git a/Additional/Amazon CDW5_IP Addresses_Local_formatted.xlsx b/Additional/Amazon CDW5_IP Addresses_Local_formatted.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..4639937fdee9213beea392235f53c3c6fc6327a5 GIT binary patch literal 8673 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 [output_file.xlsx] + +Examples: + python format.py "Amazon CDW5_IP Addresses_Local.xlsx" + python format.py "input.xlsx" "output.xlsx" +""" + +import argparse +import pandas as pd +from pathlib import Path +from openpyxl import load_workbook +from openpyxl.styles import Font, Alignment, PatternFill, Border, Side +from openpyxl.utils import get_column_letter + + +def convert_format(source_file, output_file): + """Convert source Excel format to target format.""" + print(f"Reading source file: {source_file}") + # Read with header=2 to skip first 2 rows and use row 2 as header + source_df = pd.read_excel(source_file, header=2) + + print(f"Source file shape: {source_df.shape}") + print(f"Source columns: {list(source_df.columns)}") + + # Find the column names - they should be in row 2 + print("\nFirst few rows of source:") + print(source_df.head(10).to_string()) + + # Map source columns to target columns + # Based on the structure, we need to find columns by their actual header values + cols = list(source_df.columns) + + # Find columns by exact name match first + dpm_col = None + dpm_ip_col = None + name_col = None + part_number_col = None + ip_col = None + + for col in source_df.columns: + col_str = str(col).strip() + if col_str == 'DPM' and 'PORT' not in col_str: + dpm_col = col + elif col_str == 'IP' and dpm_ip_col is None and 'PORT' not in col_str: + # First IP column is DPM_IP + dpm_ip_col = col + elif col_str == 'Assigned Device': + name_col = col + elif col_str == 'Part Number': + part_number_col = col + elif col_str == 'IP.1' or (col_str == 'IP' and dpm_ip_col is not None): + # Second IP column is device IP (pandas renames duplicate columns) + ip_col = col + + # Fallback: use column indices if names don't match + # Based on the structure: columns are at indices 3, 4, 5, 6, 7 + if dpm_col is None and len(cols) >= 8: + dpm_col = cols[3] # 'DPM' + dpm_ip_col = cols[4] # 'IP' + name_col = cols[5] # 'Assigned Device' + part_number_col = cols[6] # 'Part Number' + ip_col = cols[7] # 'IP.1' (second IP column) + + print(f"\nColumn mapping:") + print(f" DPM: {dpm_col}") + print(f" DPM_IP: {dpm_ip_col}") + print(f" Name: {name_col}") + print(f" PartNumber: {part_number_col}") + print(f" IP: {ip_col}") + + # Validate that we found the essential columns + if not dpm_col or not name_col: + raise ValueError(f"Could not find required columns. Found: DPM={dpm_col}, Name={name_col}") + + # Forward-fill DPM and DPM_IP values (they're merged across multiple rows) + source_df[dpm_col] = source_df[dpm_col].ffill() + if dpm_ip_col: + source_df[dpm_ip_col] = source_df[dpm_ip_col].ffill() + + # Extract data + output_data = [] + for idx, row in source_df.iterrows(): + dpm = row[dpm_col] if dpm_col and pd.notna(row[dpm_col]) else None + dpm_ip = row[dpm_ip_col] if dpm_ip_col and pd.notna(row[dpm_ip_col]) else None + name = row[name_col] if name_col and pd.notna(row[name_col]) else None + part_number = row[part_number_col] if part_number_col and pd.notna(row[part_number_col]) else None + ip = row[ip_col] if ip_col and pd.notna(row[ip_col]) else None + + # Only add rows that have at least DPM and Name (the essential data) + if pd.notna(dpm) and pd.notna(name): + output_data.append({ + 'DPM': str(dpm).strip(), + 'DPM_IP': str(dpm_ip).strip() if pd.notna(dpm_ip) else '', + 'Name': str(name).strip(), + 'PartNumber': str(part_number).strip() if pd.notna(part_number) else '', + 'IP': str(ip).strip() if pd.notna(ip) else '' + }) + + # Create output dataframe + output_df = pd.DataFrame(output_data) + + print(f"\nExtracted {len(output_df)} rows of network data") + print("\nFirst few rows of output:") + print(output_df.head(10).to_string()) + + # Write output with formatting + print(f"\nWriting output to: {output_file}") + + with pd.ExcelWriter(output_file, engine='openpyxl') as writer: + output_df.to_excel(writer, sheet_name='NETWORK_PLC', index=False) + + # Get the worksheet + output_ws = writer.sheets['NETWORK_PLC'] + + # Set column widths (reasonable defaults) + column_widths = { + 'A': 20, # DPM + 'B': 16, # DPM_IP + 'C': 30, # Name + 'D': 18, # PartNumber + 'E': 16 # IP + } + for col_letter, width in column_widths.items(): + output_ws.column_dimensions[col_letter].width = width + + # Format header row + header_fill = PatternFill(start_color="D3D3D3", end_color="D3D3D3", fill_type="solid") + header_font = Font(bold=True, size=11) + header_alignment = Alignment(horizontal="center", vertical="center") + thin_border = Border( + left=Side(style="thin"), + right=Side(style="thin"), + top=Side(style="thin"), + bottom=Side(style="thin") + ) + + for col_idx in range(1, len(output_df.columns) + 1): + header_cell = output_ws.cell(row=1, column=col_idx) + header_cell.font = header_font + header_cell.fill = header_fill + header_cell.alignment = header_alignment + header_cell.border = thin_border + + # Format data rows + data_alignment = Alignment(horizontal="left", vertical="center") + for row_idx in range(2, len(output_df) + 2): + for col_idx in range(1, len(output_df.columns) + 1): + data_cell = output_ws.cell(row=row_idx, column=col_idx) + data_cell.alignment = data_alignment + data_cell.border = thin_border + + # Center align IP columns (DPM_IP and IP) + for row_idx in range(2, len(output_df) + 2): + output_ws.cell(row=row_idx, column=2).alignment = Alignment(horizontal="center", vertical="center") # DPM_IP + output_ws.cell(row=row_idx, column=5).alignment = Alignment(horizontal="center", vertical="center") # IP + + print(f"\nConversion complete!") + print(f" Output saved to: {output_file}") + print(f" Total rows: {len(output_df)}") + + +def main(): + parser = argparse.ArgumentParser( + description="Convert Excel network structure format to standardized format", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +Examples: + python format.py "Amazon CDW5_IP Addresses_Local.xlsx" + python format.py "input.xlsx" "output.xlsx" + python format.py "C:\\path\\to\\file.xlsx" + """ + ) + parser.add_argument( + "source_file", + help="Path to the source Excel file to convert" + ) + parser.add_argument( + "output_file", + nargs="?", + default=None, + help="Path to the output Excel file (default: source_file with '_formatted' suffix)" + ) + + args = parser.parse_args() + + # Resolve file paths + source_file = Path(args.source_file) + if not source_file.is_absolute(): + # If relative, assume it's in the same directory as the script + source_file = Path(__file__).parent / source_file + + if not source_file.exists(): + print(f"ERROR: Source file not found: {source_file}") + exit(1) + + # Determine output file + if args.output_file: + output_file = Path(args.output_file) + if not output_file.is_absolute(): + output_file = Path(__file__).parent / output_file + else: + # Default: add "_formatted" before the extension + stem = source_file.stem + suffix = source_file.suffix + output_file = source_file.parent / f"{stem}_formatted{suffix}" + + print("=" * 60) + print("CONVERTING EXCEL FORMAT") + print("=" * 60) + print(f"Source: {source_file}") + print(f"Output: {output_file}") + print("=" * 60) + + try: + convert_format(source_file, output_file) + except Exception as e: + print(f"\nERROR: {e}") + import traceback + traceback.print_exc() + exit(1) + + +if __name__ == "__main__": + main() diff --git a/Additional/test_output.xlsx b/Additional/test_output.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5277d0c6a4e82890d9b4676b448d6481e830d685 GIT binary patch literal 8673 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 literal 0 HcmV?d00001 diff --git a/Additional/~$Amazon CDW5_IP Addresses_Local_formatted.xlsx b/Additional/~$Amazon CDW5_IP Addresses_Local_formatted.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b4dfae8ac385a1710c179165bd883f3f90e8dcb8 GIT binary patch literal 165 xcmd-}&rHu$$W6>m%t=hCN>v~d@G+z_WP-5*LoP!i80P@#6ox8>R0ahqLjb@c6!icA literal 0 HcmV?d00001