From c5209635a26f17b6a527d6e4d45915e52d2be11d Mon Sep 17 00:00:00 2001 From: antoinewg Date: Wed, 18 Mar 2026 15:30:50 -0400 Subject: [PATCH] =?UTF-8?q?T=C3=A9l=C3=A9verser=20les=20fichiers=20vers=20?= =?UTF-8?q?"/"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- RSA.xlsx | Bin 0 -> 53991 bytes RSA_UDS.txt | 521 ++++++++++++++++++++++++++++++++++++++ UDS - Copie.py | 660 +++++++++++++++++++++++++++++++++++++++++++++++++ selenium.py | 40 +++ test.txt | 102 ++++++++ 5 files changed, 1323 insertions(+) create mode 100644 RSA.xlsx create mode 100644 RSA_UDS.txt create mode 100644 UDS - Copie.py create mode 100644 selenium.py create mode 100644 test.txt diff --git a/RSA.xlsx b/RSA.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..1428b1216d576d9a426748b975131c37df7e2a39 GIT binary patch literal 53991 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 Apa1{> literal 0 HcmV?d00001 diff --git a/RSA_UDS.txt b/RSA_UDS.txt new file mode 100644 index 0000000..38082c3 --- /dev/null +++ b/RSA_UDS.txt @@ -0,0 +1,521 @@ +poteau:PHO19-1 rue Church +nom_poteau: +adresse: +travaux: +diametre:0.113 + +anomalie_1: +probleme_1: + +lclc: +code_barre:LRFRNL +classe: +longueur:100 +nbe_transfo: +type_transfo: +equip: +annee:1983 +annee_inspection:2021 +circonference:100 +bois: +date: +releveur: + +hauteur_top:8.58 +hauteur_mt1:tri +hauteur_mt2: +hauteur_transfo: +hauteur_bt1:6.27 +hauteur_bt2: +hauteur_lampadaire:4.70 +hauteur_toron1:4.20 +hauteur_toron2:4.00 +hauteur_toron3:3.80 + +conducteur_mt1:477 MCM +phase_mt1:triphasé +deri_mt1: + +conducteur_mt2:477 MCM +phase_mt2:Triphasé +deri_mt2: + +conducteur_bt1:TX 4/0 +visee_bt1:Non +deri_bt1: + +proprio_toron1:Bell +type_toron1:10M +nbe_de_cable_toron1:3 +diametre_toron1:35mm +deg_sol_toron1: +croisement_toron1: +ancre_toron1: + +proprio_toron2:Bell +type_toron2:10M +nbe_de_cable_toron2:3 +diametre_toron2:30mm +deg_sol_toron2: +croisement_toron2: +ancre_toron2: + +proprio_toron3:Videotron +type_toron3:10M +nbe_de_cable_toron3:3 +diametre_toron3:20mm +deg_sol_toron3:3.62 +croisement_toron3: +ancre_toron3: + +note: + +--- +poteau:PHD4 rue Church +nom_poteau: +adresse: +travaux: +diametre:0.113 + +anomalie_1: +probleme_1: + +lclc:D0F3P +code_barre:LR016M +classe: +longueur:86 +nbe_transfo:1 +type_transfo:100Kva +equip:Coupe-circuit +annee:2002 +annee_inspection:2021 +circonference:86 +bois: +date: +releveur: + +hauteur_top:8.62 +hauteur_mt1:tri +hauteur_mt2: +hauteur_transfo: +hauteur_bt1:5.63 +hauteur_bt2: +hauteur_lampadaire:5.85 +hauteur_toron1:3.89 +hauteur_toron2:3.69 +hauteur_toron3:3.49 + +conducteur_mt1:477 MCM +phase_mt1:triphasé +dero_mt1: + +conducteur_mt2:477 MCM +phase_mt2:Triphasé +deri_mt2: + +conducteur_bt1:TX 4/0 +visee_bt1:Non +deri_bt1: + +proprio_toron1:Bell +type_toron1:10M +nbe_de_cable_toron1:3 +diametre_toron1:35mm +deg_sol_toron1: +croisement_toron1: +ancre_toron1: + +proprio_toron2:Bell +type_toron2:10M +nbe_de_cable_toron2:3 +diametre_toron2:30mm +deg_sol_toron2: +croisement_toron2: +ancre_toron2: + +proprio_toron3:Bell +type_toron3:10M +nbe_de_cable_toron3:3 +diametre_toron3:20mm +deg_sol_toron3:3.89 +croisement_toron3: +ancre_toron3: + +note:Malt présent.Poteau à remplacer cercle rouge +--- +poteau:PHD4-1 rue Church +nom_poteau: +adresse: +travaux: +diametre:0.113 + +anomalie_1: +probleme_1: + +lclc:R8M4B +code_barre:LS1DRS +classe: +longueur:86 +nbe_transfo: +type_transfo: +equip:Coupe-circuit +annee:2001 +annee_inspection:2021 +circonference: +bois: +date: +releveur: + +hauteur_top:9.96 +hauteur_mt1:tri +hauteur_mt2: +hauteur_mt3:9.27 +hauteur_transfo: +hauteur_bt1:6.57 +hauteur_bt2:6.67 +hauteur_lampadaire:6.07 +hauteur_toron1:4.27 +hauteur_toron2:4.07 +hauteur_toron3:3.87 +hauteur_toron4:4.07 + +conducteur_mt1:477 MCM +phase_mt1:triphasé +dero_mt1: + +conducteur_mt2:477 MCM +phase_mt2:Triphasé +deri_mt2: + +conducteur_mt3:2/0 ACSR +phase_mt3:Triphasé +deri_mt3: + +conducteur_bt1:TX 4/0 +visee_bt1:Non +deri_bt1: + +conducteur_bt2:2/0 Acsr +visee_bt2:Non +deri_bt2: + +proprio_toron1:Bell +type_toron1:10M +nbe_de_cable_toron1:3 +diametre_toron1:35mm +deg_sol_toron1: +croisement_toron1: +ancre_toron1: + +proprio_toron2:Bell +type_toron2:10M +nbe_de_cable_toron2:3 +diametre_toron2:30mm +deg_sol_toron2: +croisement_toron2: +ancre_toron2: + +proprio_toron3:Bell +type_toron3:10M +nbe_de_cable_toron3:3 +diametre_toron3:20mm +deg_sol_toron3:2.72 +croisement_toron3: +ancre_toron3: + +proprio_toron4:Bell +type_toron4:6M +nbe_de_cable_toron4:1 +diametre_toron4:15mm +deg_sol_toron4:3.50 +croisement_toron4: +ancre_toron4:1 + +note:degagement non ok toron attache + +tige_ancre1: 3/4 +cosse_ancre1:4 +type_ancre1:256p +ecart_ancre1:4.8 +hauban1_ancre1:6M +hauban2_ancre1:3/16 +hauban3_ancre1:5/16 +hauban4_ancre1:5/16 +etat_ancre1:OK +espace_dispo_ancre1:Non + +--- +poteau:PHO1 rue Church +nom_poteau: +adresse: +travaux: +diametre:0.113 + +anomalie_1: +probleme_1: + +lclc:O0F1X +code_barre:LQ6HVV +classe:2 +longueur:45 +nbe_transfo: +type_transfo: +equip: +annee:2008 +annee_inspection:2021 +circonference:86 +bois: +date: +releveur: + +hauteur_top:9.37 +hauteur_mt1:9.22 +hauteur_mt2:9.88 +hauteur_mt3:8.72 +hauteur_mt4:8.42 +hauteur_transfo:7.15 +hauteur_bt1:7.15 +hauteur_bt2:7.15 +hauteur_lampadaire: +hauteur_toron1:6.04 +hauteur_toron2:5.8 +hauteur_toron3:5.6 +hauteur_toron4:5.30 +hauteur_toron5:4.99 + +conducteur_mt1:477 MCM +phase_mt1:triphasé +dero_mt1: + +conducteur_mt2:477 MCM +phase_mt2:Triphasé +deri_mt2: + +conducteur_mt3:477 MCM +phase_mt3:Triphasé +deri_mt3: + +conducteur_bt1:TX 4/0 +visee_bt1:Non +deri_bt1: + +conducteur_bt2:TX 4/0 +visee_bt2:Non +deri_bt2: + +proprio_toron1:Bell +type_toron1:6M +nbe_de_cable_toron1:1 +diametre_toron1:15mm +deg_sol_toron1: +croisement_toron1: +ancre_toron1: + +proprio_toron2:Bell +type_toron2:6M +nbe_de_cable_toron2:2 +diametre_toron2:22mm +deg_sol_toron2:5.65 +croisement_toron2: +ancre_toron2: + +proprio_toron3:Bell +type_toron3:10M +nbe_de_cable_toron3:3 +diametre_toron3:30mm +deg_sol_toron3: +croisement_toron3: +ancre_toron3: + +proprio_toron4:Bell +type_toron4:10M +nbe_de_cable_toron4:4 +diametre_toron4:230mm +deg_sol_toron4: +croisement_toron4: +ancre_toron4:1 + +proprio_toron5:Bell +type_toron5:10M +nbe_de_cable_toron5:2 +diametre_toron5:35mm +deg_sol_toron5:2.7 +croisement_toron5: +ancre_toron5:1 + +note:degagement non ok toron attacj + +tige_ancre1: 1 1/4 +cosse_ancre1:4 +type_ancre1:400P +ecart_ancre1:6.0 +hauban1_ancre1:10M +hauban2_ancre1:10M +hauban3_ancre1:10M +hauban4_ancre1: +etat_ancre1:OK +espace_dispo_ancre1:Non + +tige_ancre2:1 1/4 +cosse_ancre2:4 +type_ancre2:400p +ecart_ancre2:7.4 +hauban1_ancre2:5/16 +hauban2_ancre2:1/2 +hauban3_ancre2: +etat_ancre2:A_OK +espace_dispo_ancre2:Oui + +--- +poteau:PHO7 Rue Wellington +nom_poteau: +adresse: +travaux: +diametre:0.113 + +anomalie_1: +probleme_1: + +lclc:Z0E8D +code_barre:LLUJVN +classe: +longueur:110 +nbe_transfo:1 +type_transfo:50KVA +equip:Coupe-circuit +annee:2001 +annee_inspection:2021 +circonference:110 +bois: +date: +releveur: + +hauteur_top:8.79 +hauteur_mt1:8.64 +hauteur_mt2:5.49 +hauteur_transfo:7.22 +hauteur_bt1:6.47 +hauteur_bt2:6.65 +hauteur_lampadaire: +hauteur_toron1:5.25 +hauteur_toron2:4.95 +hauteur_toron3: + +conducteur_mt1:477 MCM +phase_mt1:triphasé +dero_mt1: + +conducteur_mt2:477 MCM +phase_mt2:Triphasé +deri_mt2: + +conducteur_bt1:TX 4/0 +visee_bt1:Non +deri_bt1: + +proprio_toron1:Bell +type_toron1:6M +nbe_de_cable_toron1:1 +diametre_toron1:15mm +deg_sol_toron1: +croisement_toron1: +ancre_toron1: + +proprio_toron2:Bell +type_toron2:6M +nbe_de_cable_toron2:1 +diametre_toron2:22mm +deg_sol_toron2:4.51 +croisement_toron2: +ancre_toron2: + +tige_ancre1: 1 1/4 +cosse_ancre1:4 +type_ancre1:400P +ecart_ancre1:14.2 +hauban1_ancre1:5/16 +hauban2_ancre1: +hauban3_ancre1: +hauban4_ancre1: +etat_ancre1:OK +espace_dispo_ancre1:Oui + +note: +--- +poteau:PHO7-1 Rue Wellington +nom_poteau: +adresse: +travaux: +diametre:0.113 + +anomalie_1: +probleme_1: + +lclc:D0A1G +code_barre:LJ65R7 +classe:4 +longueur:45 +nbe_transfo:3 +type_transfo:50KVA +equip:Coupe-circuit +annee:2008 +annee_inspection:2021 +circonference: +bois: +date: +releveur: + + +hauteur_top:9.86 +hauteur_mt1:tri +hauteur_mt2: +hauteur_transfo:7.11 +hauteur_bt1:6.23 +hauteur_bt2:6.05 +hauteur_lampadaire: +hauteur_toron1:5.02 +hauteur_toron2:4.84 +hauteur_toron3: + +conducteur_mt1:477 MCM +phase_mt1:triphasé +dero_mt1: + +conducteur_mt2:477 MCM +phase_mt2:Triphasé +deri_mt2: + +conducteur_bt1:TX 4/0 +visee_bt1:Non +deri_bt1: + +proprio_toron1:Videotron +type_toron1:6M +nbe_de_cable_toron1:1 +diametre_toron1:15mm +deg_sol_toron1: +croisement_toron1: +ancre_toron1: + +proprio_toron2:Bell +type_toron2:6M +nbe_de_cable_toron2:1 +diametre_toron2:22mm +deg_sol_toron2:4.51 +croisement_toron2: +ancre_toron2: + +tige_ancre1: 1 1/4 +cosse_ancre1:4 +type_ancre1:400P +ecart_ancre1:2.4 +hauban1_ancre1:5/16 +hauban2_ancre1: +hauban3_ancre1: +hauban4_ancre1: +etat_ancre1:OK +espace_dispo_ancre1:Oui + +note:hauban lache + +--- \ No newline at end of file diff --git a/UDS - Copie.py b/UDS - Copie.py new file mode 100644 index 0000000..490fc4e --- /dev/null +++ b/UDS - Copie.py @@ -0,0 +1,660 @@ +import io, re, shutil, random +from datetime import date +import sys +from openpyxl import load_workbook +from io import BytesIO +from openpyxl import Workbook +from js import console + + +def save_workbook_to_bytes(wb): + buffer = io.BytesIO() + wb.save(buffer) + return buffer.getvalue() + +# Pull variables set by JS +template_uint8 = globals().get("template_uint8") #get les id du html par le java +txt_content = globals().get("txt_content") +typeDoc = globals().get("typeDoc") +nom_du_releveur = globals().get("nom_du_releveur") +hauteur_bosch = globals().get("hauteur_bosch") + +# Convert template bytes into Python bytes +template_bytes = bytes(template_uint8) + +# --- Start of your original dictionaries and logic (slightly adapted) --- + +cells = {} +if typeDoc == "uds": + cells = { + "poteau": "B4", + "projet": "K3", + "révision": "O3", + "travaux": "B3", + "diametre": "H3", + "adresse": "K4", + "plan": "H4", + "code_barre": "N6", + "pro_poteau": "K7", + "annee_inspection": "H5", + "parc": "K5", + "option_HQ":"N5", + "longueur": "C6", + "classe": "D6", + "annee": "H6", + "circonference": "K6", + "p/r":"D7", + "usage_commun:": "O7", + "angle": "K13", + "lclc": "K14", + "nbe_transfo": "L15", + "type_transfo": "K15", + "equip": "K16", + "gradation": "K17", + "lampadaire":"K18", + "las":"K19", + "montage_HQ":"K20", + "portee_lache":"K21", + "portee_pre:": "K22", + "portee_sui:": "N22", + "malt":"N21", + "reseau":"N20", + "cabinet":"O19", + "luminaire":"N18", + "traverse":"O17", + "las":"N16", + "fosse": "O14", + "hauteur_transfo": "O15", + "hauteur_top": "A11", + "portee_pre:": "B14", + "portee_sui:": "C14", + "hauteur_mt1": "A14", + "conducteur_mt1": "C14", + "phase_mt1": "B14", + "deri_mt1": "D14", + "hauteur_mt2": "A15", + "conducteur_mt2": "C15", + "phase_mt2": "B15", + "deri_mt2": "D15", + "hauteur_mt3:": "A16", + "conducteur_mt3": "C16", + "phase_mt3": "B16", + "deri_mt3": "D16", + "hauteur_bt1": "A23", + "conducteur_bt1": "B23", + "visee_bt1": "C23", + "deri_bt1": "D23", + "hauteur_bt2": "A22", + "conducteur_bt2": "B22", + "visee_bt2": "C22", + "deri_bt2": "D22", + "hauteur_bt3": "A21", + "conducteur_mbt3": "B21", + "visee_bt3": "C21", + "deri_bt3": "D21", + "hauteur_bt4": "A20", + "conducteur_bt4": "B20", + "visee_bt4": "C20", + "deri_bt4": "D20", + "hauteur_bt5": "A19", + "conducteur_bt5": "B19", + "visee_bt5": "C19", + "deri_bt5": "D19", + "hauteur_bt6": "A18", + "conducteur_bt6:": "B18", + "visee_bt6": "C18", + "deri_bt6": "D18", + "hauteur_toron1": "A27", + "proprio_toron1": "B27", + "toron1_existant": "C27", + "deri":"D27", + "type_toron1": "J27", + "nbe_de_cable_toron1": "L27", + "diametre_toron1": "K27", + "rupture_toron1": "M27", + "deg_sol_toron1": "N27", + "ancre_toron1": "O27", + "hauteur_toron2": "A28", + "proprio_toron2": "B28", + "existant_toron2": "C28", + "deri_toron2": "D28", + "type_toron2": "J28", + "nbe_de_cable_toron2": "L28", + "diametre_toron2": "K28", + "rupture_toron2": "M28", + "deg_sol_toron2": "N28", + "ancre_toron2": "O28", + "hauteur_toron3": "A29", + "proprio_toron3": "B29", + "existant_toron3": "C29", + "deri_toron3": "D29", + "type_toron3": "J29", + "nbe_de_cable_toron3": "L29", + "diametre_toron3": "K29", + "rupture_toron3": "M29", + "deg_sol_toron3": "N29", + "ancre_toron3": "O29", + "hauteur_toron4": "A30", + "proprio_toron4": "B30", + "existant_toron4": "C30", + "deri_toron4": "D30", + "type_toron4": "J30", + "nbe_de_cable_toron4": "L30", + "diametre_toron4": "K30", + "rupture_toron4": "M30", + "deg_sol_toron4": "N30", + "ancre_toron4": "O30", + "hauteur_toron5": "A31", + "proprio_toron5": "B31", + "existant_toron5": "C31", + "deri_toron5": "D31", + "type_toron5": "J31", + "nbe_de_cable_toron5": "L31", + "diametre_toron5": "K31", + "rupture_toron5": "M31", + "deg_sol_toron5": "N31", + "ancre_toron5": "O31", + "hauteur_toron6": "A32", + "proprio_toron6": "B32", + "existant_toron6": "C32", + "deri_toron6": "D32", + "type_toron6": "J32", + "nbe_de_cable_toron6": "L32", + "diametre_toron6": "K32", + "rupture_toron6": "M32", + "deg_sol_toron6": "N32", + "ancre_toron6": "O32", + "type_de_sol_ancre1": "K36", + "capacite_ancre1": "K37", + "angle_ancre1":"K38", + "hauban1_ancre1": "K39", + "hauban2_ancre1": "K40", + "hauban3_ancre1": "K41", + "hauban4_ancre1": "K42", + "tige_ancre1":"K43", + "cosse_ancre1": "K44", + "ecart_ancre1": "K45", + "type_ancre1": "K46", + "devi_ancre1": "K47", + "espace_dispo_ancre1": "K48", + "etat_ancre1": "K49", + "type_de_sol_ancre2": "M36", + "capacite_ancre2": "M37", + "angle_ancre2":"M38", + "hauban1_ancre2": "M39", + "hauban2_ancre2": "M40", + "hauban3_ancre2": "M41", + "hauban4_ancre2": "M42", + "tige_ancre2":"M43", + "cosse_ancre2": "M44", + "ecart_ancre2": "M45", + "type_ancre2": "M46", + "devi_ancre2": "M47", + "espace_dispo_ancre2": "M48", + "etat_ancre2": "M49", + "type_de_sol_ancre3": "N36", + "capacite_ancre3": "N37", + "angle_ancre3": "N38", + "hauban1_ancre3": "N39", + "hauban2_ancre3": "N40", + "hauban3_ancre3": "N41", + "hauban4_ancre3": "N42", + "tige_ancre3": "N43", + "cosse_ancre3": "N44", + "ecart_ancre3": "N45", + "type_ancre3": "N46", + "devi_ancre3": "N47", + "espace_dispo_ancre3": "N48", + "etat_ancre3": "N49", + "type_de_sol_ancre4": "O36", + "capacite_ancre4": "O37", + "angle_ancre4": "O38", + "hauban1_ancre4": "O39", + "hauban2_ancre4": "O40", + "hauban3_ancre4": "O41", + "hauban4_ancre4": "O42", + "tige_ancre4": "O43", + "cosse_ancre4": "O44", + "ecart_ancre4": "O45", + "type_ancre4": "O46", + "devi_ancre4": "O47", + "espace_dispo_ancre4": "O48", + "etat_ancre4": "O49", + "ligne_haute_tension": "K51", + "element_sensible": "O51", + "note": "A56", + "date": "K62", + } +elif typeDoc == "rsa": + cells = { + "poteau": "B1", + "projet": "F1", + "révision": "I1", + "travaux": "B2", + "diametre": "D2", + "classification_travaux":'F2', + "anomalie_1": "B3", + "anomalie_2": "B4", + "anomalie_3": "B5", + "probleme_1": "E3", + "probleme_2": "E4", + "probleme_3": "E5", + "nom_poteau": "B6", + "adresse": "D6", + "plan": "G6", + "code_barre": "I6", + "pro_poteau": "B7", + "usage_commun:": "D7", + "parc": "F7", + "lclc": "I7", + "longueur": "B8", + "classe": "D8", + "annee": "F8", + "nbe_transfo": "H8", + "type_transfo": "I8", + "annee_inspection": "B9", + "modele_bell": "D9", + "modele_HQ": "F9", + "equip": "H9", + "fosse": "B9", + "hauteur_lampadaire": "D10", + "cabinet": "F10", + "hauteur_transfo": "H10", + "hauteur_top": "A14", + "portee_pre:": "B14", + "portee_sui:": "C14", + "portee_dero": "D14", + "toron_ins": "E14", + "milieu": "G13", + "hauteur_mt1": "A16", + "conducteur_mt1": "B16", + "phase_mt1": "C16", + "deri_mt1": "D16", + "hauteur_mt2": "A17", + "conducteur_mt2": "B17", + "phase_mt2": "C17", + "deri_mt2": "D17", + "hauteur_mt3": "A18", + "conducteur_mt3": "B18", + "phase_mt3": "C18", + "deri_mt3": "D18", + "hauteur_mt4": "A19", + "conducteur_mt4": "B19", + "phase_mt4": "C19", + "deri_mt4": "D19", + "hauteur_mt5": "A20", + "conducteur_mt5:": "B20", + "phase_mt5": "C20", + "deri_mt5": "D20", + "hauteur_bt1": "A27", + "conducteur_bt1": "B27", + "visee_bt1": "C27", + "deri_bt1": "D27", + "hauteur_bt2": "A26", + "conducteur_bt2": "B26", + "visee_bt2": "C26", + "deri_bt2": "D26", + "hauteur_bt3": "A25", + "conducteur_mbt3": "B25", + "visee_bt3": "C25", + "deri_bt3": "D25", + "hauteur_bt4": "A24", + "conducteur_bt4": "B24", + "visee_bt4": "C24", + "deri_bt4": "D24", + "hauteur_bt5": "A23", + "conducteur_bt5": "B23", + "visee_bt5": "C23", + "deri_bt5": "D23", + "hauteur_bt6": "A22", + "conducteur_bt6:": "B22", + "visee_bt6": "C22", + "deri_bt6": "D22", + "hauteur_toron1": "A29", + "proprio_toron1": "B29", + "type_toron1": "C29", + "nbe_de_cable_toron1": "D29", + "diametre_toron1": "E29", + "rupture_toron1": "F29", + "deg_sol_toron1": "G29", + "croisement_toron1": "H29", + "ancre_toron1": "I29", + "hauteur_toron2": "A30", + "proprio_toron2": "B30", + "type_toron2": "C30", + "nbe_de_cable_toron2": "D30", + "diametre_toron2": "E30", + "rupture_toron2": "F30", + "deg_sol_toron2": "G30", + "croisement_toron2": "H30", + "ancre_toron2": "I30", + "hauteur_toron3": "A31", + "proprio_toron3": "B31", + "type_toron3": "C31", + "nbe_de_cable_toron3": "D31", + "diametre_toron3": "E31", + "rupture_toron3": "F31", + "deg_sol_toron3": "G31", + "croisement_toron3": "H31", + "ancre_toron3": "I31", + "hauteur_toron4": "A32", + "proprio_toron4": "B32", + "type_toron4": "C32", + "nbe_de_cable_toron4": "D32", + "diametre_toron4": "E32", + "rupture_toron4": "F32", + "deg_sol_toron4": "G32", + "croisement_toron4": "H32", + "ancre_toron4": "I32", + "hauteur_toron5": "A33", + "proprio_toron5": "B33", + "type_toron5": "C33", + "nbe_de_cable_toron5": "D33", + "diametre_toron5": "E33", + "rupture_toron5": "F33", + "deg_sol_toron5": "G33", + "croisement_toron5": "H33", + "ancre_toron5": "I33", + "hauteur_toron6": "A34", + "proprio_toron6": "B34", + "type_toron6": "C34", + "nbe_de_cable_toron6": "D34", + "diametre_toron6": "E34", + "rupture_toron6": "F34", + "deg_sol_toron6": "G34", + "croisement_toron6": "H34", + "ancre_toron6": "I34", + "type_de_sol_ancre1": "F17", + "tige_ancre1": "F18", + "cosse_ancre1": "F19", + "type_ancre1": "F20", + "ecart_ancre1": "F21", + "hauban1_ancre1": "F22", + "hauban2_ancre1": "F23", + "hauban3_ancre1": "F24", + "hauban4_ancre1": "F25", + "etat_ancre1": "f26", + "espace_dispo_ancre1": "F27", + "type_de_sol_ancre2": "G17", + "tige_ancre2": "G18", + "cosse_ancre2": "G19", + "type_ancre2": "G20", + "ecart_ancre2": "G21", + "hauban1_ancre2": "G22", + "hauban2_ancre2": "G23", + "hauban3_ancre2": "G24", + "hauban4_ancre2": "G25", + "etat_ancre2": "G26", + "espace_dispo_ancre2": "G27", + "type_de_sol_ancre3": "H17", + "tige_ancre3": "H18", + "cosse_ancre3": "H19", + "type_ancre3": "H20", + "ecart_ancre3": "H21", + "hauban1_ancre3": "H22", + "hauban2_ancre3": "H23", + "hauban3_ancre3": "H24", + "hauban4_ancre3": "H25", + "etat_ancre3": "H26", + "espace_dispo_ancre3": "H27", + "type_de_sol_ancre4": "I17", + "tige_ancre4": "I18", + "cosse_ancre4": "I19", + "type_ancre4": "I20", + "ecart_ancre4": "I21", + "hauban1_ancre4": "I22", + "hauban2_ancre4": "I23", + "hauban3_ancre4": "I24", + "hauban4_ancre4": "I25", + "etat_ancre4": "I26", + "espace_dispo_ancre4": "I27" , + "ligne_haute_tension": "A36", + "dis_appro": "C36", + "element_sensible": "D36", + "coord": "G36", + "note": "A38", + "date": "F49", + "releveur": "F47", + } +else: + raise Exception("Erreur: typeDoc invalide (uds ou rsa requis)") + +# keep your type_poteaux & parc dictionaries exactly +type_poteaux = { + 74:(35, 5), + 79:{'JP': (35, 5), 'SYP': (40, 5), 'LPP': (35, 5)}, + 80:(35, 4), + 81:(35, 5), + 82:(45, 5), + 83:{'LPP': (40, 5), 'WRC': (35, 5)}, + 84:(40, 5), + 86:{'RP': (40, 5), 'JP': (35, 4)}, + 87:(45, 5), + 88:{'RP': (35, 4), 'JP': (45, 5), 'WRC': (40, 5)}, + 89:(45, 4), + 90:{'RP': (45, 5), 'LPP': (40, 4), 'WRC': (35, 4)}, + 91:(40, 4), + 92:(45, 5), + 93:{'RP': (40, 4), 'SYP': (35, 2)}, + 94:(45, 4), + 95:{'JP': (45, 4), 'WRC': (40, 4)}, + 97:(45, 4), + 98: {'SYP': (40, 2), 'LPP': (35, 2)}, + 99:(35, 2), + 100:(45, 4), + 101:(35, 2), + 103:{'SYP': (45, 2), 'WRC': (35, 2)}, + 104:(40, 2), + 105:(40, 2), + 107:(40, 2), + 109:(45, 2), + 110:{'JP': (45, 2), 'WRC': (40, 2)}, + 112:(45, 2), + 115:(45, 2), +} + +parc = { + "304":("saint-remi","saint-michel","sherrington"), + "339":("sainte-clotilde","saint-chrysostome","hemmingford","havelock"), + "303":("franklin","ormstown","saint-antoine","hinchinbrooke","godmanchester","huntingdon","saint-anicet","dundee","elgin"), + "306":("lacolle","napierville","saint-bernard-de-lacolle"), + "363":("saint-barbe","saint-stanislas-de-kostka","saint-etienne-de-beauharnois","saint-louis-de-gonzague"), +} + +# We'll parse the txt content similar to your script +lines = txt_content.splitlines() +valeurs = {} +outputs = [] # list of tuples (filename, bytes) + +def create_excel_from_valeurs(valeurs_dict): + # create a name and a workbook based on the uploaded template bytes + nom_du_poteau = valeurs_dict.get('poteau', 'poteau').strip() + '.xlsx' + # load a fresh workbook from template bytes + bio = io.BytesIO(template_bytes) + wb = load_workbook(filename=bio) + # choose 'Grille' sheet if exists else active + if 'Grille' in wb.sheetnames: + ws = wb['Grille'] + else: + ws = wb.active + + for key, value in list(valeurs_dict.items()): + try: + champs = cells[key] + ws[champs] = value + except Exception: + # ignore keys not present in cells + continue + + out_bytes = save_workbook_to_bytes(wb) + return nom_du_poteau, out_bytes + +# helper to safely convert floats when needed +def safe_float(x): + try: + return float(x) + except: + return None + +# The main parsing loop (close to your original) +for line in lines: + if '---' in line: + # finalize current record + if 'poteau' in valeurs and valeurs.get('poteau','').strip() != '': + fname, b = create_excel_from_valeurs(valeurs) + outputs.append((fname, b)) + console.log(f'Created output: {fname}') + valeurs = {} + continue + + if line.strip() == "": + continue + + if ':' not in line: + continue + + variable, value = line.split(":", 1) + variable = variable.strip() + value = value.rstrip("\n") + + # replicate your special handling rules + if 'hauteur' or "deg" in variable: + if value.strip() == "": + continue + + # compute with hauteur_bosch (string) + try: + c = float(value) + a = 1 + hb = float(hauteur_bosch) + b = (c**2 - a**2)**0.5 + hb + b = round(b, 2) + value = str(b).replace(".", ",") + + except Exception: + + if value.strip() == 'tri': + valeurs["hauteur_top"] = str(valeurs["hauteur_top"].replace(",", ".")) + value = str(round(float(valeurs['hauteur_top']) + 0.3, 2)).replace(".", ",") + valeurs["hauteur_mt2"] = str(round(float(valeurs['hauteur_top']) - 0.15,2)).replace(".", ",") + valeurs["hauteur_top"] = str(valeurs["hauteur_top"].replace(".", ",")) + pass + + if 'nom_poteau' in variable: + # copy name from 'poteau' (first token) + if 'poteau' in valeurs: + value = valeurs["poteau"].split(" ", 1)[0] + + if 'adresse' in variable: + + # ================================================================= + # Utilise re.sub() pour retirer le texte non numérique au début, + # puis supprimer toute indication de type "+2" ou "-3" accolée + # au numéro principal, en conservant le reste de l'adresse. + # + # Expression utilisée : r'^\D*(\d+)(?:[+-]\d+)?(.*)' + # - ^ → début de la chaîne + # - \D* → zéro ou plusieurs caractères qui NE sont PAS des chiffres + # (supprime par exemple "PHD", "PHC", etc.) + # - (\d+) → capture le numéro principal (un ou plusieurs chiffres) + # - (?: ... ) → parenthèses non capturantes (pour regrouper sans créer un groupe séparé) + # - [+-]\d+ → un signe "+" ou "-" suivi d'un ou plusieurs chiffres + # (par ex. "+2" ou "-3") + # - ? → rend la partie [+-]\d+ optionnelle + # - (.*) → capture tout le reste de la chaîne (l'adresse après le numéro) + # + # Remplacement utilisé : r'\1\2' + # - \1 → insère le numéro principal capturé + # - \2 → insère le texte restant de l'adresse + # + # Exemple : + # "PHD248+2 chemin de l'église" devient "248 chemin de l'église" + # "PHC300-1 rue des lilas" devient "300 rue des lilas" + # ================================================================= + if 'poteau' in valeurs: + value = re.sub(r'^\D*(\d+)(?:[+-]\d+)?(.*)', r'\1\2', valeurs["poteau"]) + + if 'date' in variable: + if typeDoc == 'uds': + value = str(nom_du_releveur + '\\n') + str(date.today()) + else: + value = str(date.today()) + + if 'longueur' in variable: + + value = value.strip() + + try: + value_int = int(value) + except ValueError: + continue + + if value_int not in type_poteaux: + valeurs[variable] = value + continue + + type_poteaux_entre = type_poteaux[value_int] + + if isinstance(type_poteaux_entre, dict): + + bois = valeurs.get('bois', '').strip() + if bois == '': + value = next(iter(type_poteaux_entre.values()))[0] + valeurs['classe'] = next(iter(type_poteaux_entre.values()))[1] + valeurs[variable] = value #Créer une itérateur qui permet de parcourir les éléments une par une + continue + + valeurs['classe'] = type_poteaux_entre[bois][1] + value = type_poteaux_entre[bois][0] + else: + valeurs['classe'] = type_poteaux_entre[1] + value = type_poteaux_entre[0] + + if "ville" in variable: + # determine parc key covering the town name + found = None + for k,v in parc.items(): + if value.strip() in v: + found = k + break + valeurs['parc'] = found + + if "releveur" in variable: + + value = nom_du_releveur + + # finally store the variable + valeurs[variable] = value + +# if file doesn't end with '---', create last record +if valeurs and 'poteau' in valeurs and valeurs.get('poteau','').strip() != '': + fname, b = create_excel_from_valeurs(valeurs) + outputs.append((fname, b)) + +from js import Uint8Array, Blob, URL, document + +for fname, bbytes in outputs: + u8 = Uint8Array.new(bbytes) # explicitly convert Python bytes to JS Uint8Array + blob = Blob.new([u8], { "type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }) + url = URL.createObjectURL(blob) + a = document.createElement("a") + a.href = url + a.download = fname + a.textContent = "[Télécharger] " + fname + document.getElementById("downloads").appendChild(a) + console.log("Prepared download for " + fname) + + +# also print a summary to the page console element +from js import console as js_console +js_console.log(f"Created {len(outputs)} file(s).") +print(f"Created {len(outputs)} file(s).") # visible in the log element too + + + + + + + + + diff --git a/selenium.py b/selenium.py new file mode 100644 index 0000000..8872554 --- /dev/null +++ b/selenium.py @@ -0,0 +1,40 @@ +from selenium import webdriver +from selenium.webdriver.chrome.service import Service +from selenium.webdriver.common.by import By +from selenium.webdriver.common.keys import Keys +import time + +# Chemin vers ChromeDriver +CHROMEDRIVER_PATH = "./chromedriver" # Remplacez par le chemin correct + +# Options pour Chrome +options = webdriver.ChromeOptions() +options.add_argument("--headless") # Mode sans interface graphique +options.add_argument("--disable-gpu") +options.add_argument("--window-size=1920,1080") + +# Initialisation du driver +service = Service(CHROMEDRIVER_PATH) +driver = webdriver.Chrome(service=service, options=options) + +try: + # Ouvrir la page + url = "https://www.consortiumdus.com/DUSS/Demande/Liste" + driver.get(url) + time.sleep(3) # Attendre le chargement + + # Vérifier si une connexion est requise + if "login" in driver.current_url.lower(): + print("Page de connexion détectée. Ajoutez ici le code pour la connexion.") + # Exemple : remplir un formulaire de connexion + # username_input = driver.find_element(By.ID, "username") + # password_input = driver.find_element(By.ID, "password") + # username_input.send_keys("votre_identifiant") + # password_input.send_keys("votre_mot_de_passe") + # password_input.send_keys(Keys.RETURN) + # time.sleep(3) # Attendre la redirection + + print("Navigation réussie !") + +finally: + driver.quit() \ No newline at end of file diff --git a/test.txt b/test.txt new file mode 100644 index 0000000..c96a9b1 --- /dev/null +++ b/test.txt @@ -0,0 +1,102 @@ +poteau:PHD4-1 rue Church +nom_poteau: +adresse: +travaux: +diametre:0.113 + +anomalie_1: +probleme_1: + +lclc:R8M4B +code_barre:LS1DRS +classe: +longueur:86 +nbe_transfo: +type_transfo: +equip:Coupe-circuit +annee:2001 +annee_inspection:2021 +circonference: +bois: +date: +releveur: + +hauteur_top:9.96 +hauteur_mt1:tri +hauteur_mt2: +hauteur_mt3:9.27 +hauteur_transfo: +hauteur_bt1:6.57 +hauteur_bt2:6.67 +hauteur_lampadaire:6.07 +hauteur_toron1:4.27 +hauteur_toron2:4.07 +hauteur_toron3:3.87 +hauteur_toron4:4.07 + +conducteur_mt1:477 MCM +phase_mt1:triphasé +dero_mt1: + +conducteur_mt2:477 MCM +phase_mt2:Triphasé +deri_mt2: + +conducteur_mt3:2/0 ACSR +phase_mt3:Triphasé +deri_mt3: + +conducteur_bt1:TX 4/0 +visee_bt1:Non +deri_bt1: + +conducteur_bt2:2/0 Acsr +visee_bt2:Non +deri_bt2: + +proprio_toron1:Bell +type_toron1:10M +nbe_de_câble_toron1:3 +diametre_toron1:35mm +deg_sol_toron1: +croisement_toron1: +ancre_toron1: + +proprio_toron2:Bell +type_toron2:10M +nbe_de_câble_toron2:3 +diametre_toron2:30mm +deg_sol_toron2: +croisement_toron2: +ancre_toron2: + +proprio_toron3:Bell +type_toron3:10M +nbe_de_câble_toron3:3 +diametre_toron3:20mm +deg_sol_toron3:2.72 +croisement_toron3: +ancre_toron3: + +proprio_toron4:Bell +type_toron4:6M +nbe_de_câble_toron4:1 +diametre_toron4:15mm +deg_sol_toron4:3.50 +croisement_toron4: +ancre_toron4:1 + +note:degagement non ok toron attacj +Her + +tige_ancre1: 3/4 +cosse_ancre1:4 +type_ancre1:256p +ecart_ancre1:4.8 +hauban1_ancre1:6M +hauban2_ancre1:3/16 +hauban3_ancre1:5/16 +hauban4_ancre1:5/16 +etat_ancre1:OK +espace_dispo_ancre1:Non +--- \ No newline at end of file