Premier commit UDS RSA

This commit is contained in:
antoinewg 2026-03-18 17:05:48 -04:00
parent d79999c56b
commit 2f335f2b09
17 changed files with 3197 additions and 3162 deletions

3
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

View File

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

7
.idea/misc.xml Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="Python 3.11 (pythonProject2)" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11 (UDS)" project-jdk-type="Python SDK" />
</project>

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/pythonProject2.iml" filepath="$PROJECT_DIR$/.idea/pythonProject2.iml" />
</modules>
</component>
</project>

10
.idea/pythonProject2.iml Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.venv" />
</content>
<orderEntry type="jdk" jdkName="Python 3.11 (UDS)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -1,222 +1,222 @@
📄 FICHE SIMPLE Générateur UDS / RSA
🎯 À quoi sert cet outil ?
Cet outil permet de :
➡ Transformer un fichier texte (.txt) contenant des informations sur des poteaux
➡ En plusieurs fichiers Excel remplis automatiquement
➡ À partir dun template officiel UDS ou RSA
-----------------------
Le tout fonctionne directement dans le navigateur, sans installation.
🧩 Ce dont vous avez besoin
✅ Un fichier texte (.txt) avec les données des poteaux
✅ Le template Excel correspondant :
UDS.xlsx si vous choisissez UDS
RSA.xlsx si vous choisissez RSA
✅ Le nom du releveur
✅ La hauteur Bosch (ex: 1.5)
---------------------
🖥️ Comment utiliser loutil
Étape 1 Choisir le type de document
Sélectionnez le type:
uds → pour générer des grilles UDS
rsa → pour générer des grilles RSA
Étape 2 Importer les fichiers
Téléchargez le template Excel
Téléchargez le fichier texte (.txt)
Étape 3 Entrer les informations
Nom du releveur
Hauteur de l<appareil Bosch par rapport au sol(exemple : 1.5)
Étape 4 Cliquer sur "Run & Generate Excel files"
Loutil va :
Lire le fichier texte
Séparer chaque poteau
Appliquer les calculs nécessaires
Remplir le template Excel
Générer un fichier par poteau
Les fichiers apparaîtront dans la section Downloads.
📂 Comment doit être structuré le fichier texte ?
Chaque poteau doit être écrit sous forme :
poteau:PHO19-1 rue Church
diametre:0.113
longueur:100
hauteur_top:8.58
hauteur_bt1:6.27
il faut prendre le modèle texte rsa ou uds.
-------------------------------------
⚠ Très important :
Chaque ligne doit respecter le format :
variable:valeur
Les poteaux doivent être séparés par :
--------------------------------------
🧠 Ce que fait loutil automatiquement
✔ 1. Sépare chaque poteau
Chaque section entre --- devient un fichier Excel distinct.
✔ 2. Remplit automatiquement les cellules Excel
Chaque variable du fichier texte correspond à une cellule précise dans le template.
Exemple :
poteau:PHO19
→ sera placé dans la cellule prévue pour le nom du poteau.
✔ 3. Calcule automatiquement les hauteurs
Si une hauteur est donnée, loutil :
Applique la formule avec la hauteur Bosch
Arrondit le résultat
Formate correctement pour Excel
Si la valeur est tri, il applique un calcul spécial automatique.
✔ 4. Détermine automatiquement la classe selon la longueur
Si la longueur correspond à une valeur connue :
La classe est automatiquement ajoutée
La longueur peut être ajustée selon le type de bois
✔ 5. Génère automatiquement la date
En UDS : Nom du releveur + date
En RSA : Date seulement
📌 Règles importantes à respecter
🔹 1. Les noms des variables doivent être exacts
Exemple correct :
hauteur_bt1:
Si une faute dorthographe est faite :
hauteur_bt_1
→ La donnée ne sera pas utilisée.
🔹 2. Respecter les séparateurs
Chaque poteau doit être terminé par :
---
Sinon le dernier poteau peut ne pas être généré.
🔹 3. Format numérique
Utiliser :
6.25
Pas :
6,25
(Loutil convertira automatiquement pour Excel.)
📦 Ce que loutil NE fait PAS
❌ Ne corrige pas les fautes dans les variables
❌ Ne vérifie pas la cohérence des données
❌ Ne sauvegarde rien sur internet
Tout reste dans votre navigateur.
🔐 Sécurité
✔ Aucun envoi de données sur un serveur
✔ Tout est généré localement
✔ Fonctionne même sans internet après chargement
📊 Résumé simple
Votre fichier texte devient :
1 poteau = 1 fichier Excel
Automatiquement rempli, prêt à être utilisé.
🛠 En cas de problème
Si aucun fichier nest généré :
Vérifier que le template correspond au type choisi
Vérifier que le fichier texte contient bien poteau:
Vérifier la présence des ---
Vérifier lorthographe des variables
🎯 En une phrase
Cet outil transforme automatiquement un fichier texte structuré en plusieurs grilles Excel UDS ou RSA complétées, sans travail manuel.
Si tu veux, je peux aussi te faire :
📄 Une version prête à imprimer
🧑‍🏫 Une version ultra simplifiée pour un collègue
🏢 Une version professionnelle pour présentation à un gestionnaire
📘 Un guide utilisateur en PDF
📄 FICHE SIMPLE Générateur UDS / RSA
🎯 À quoi sert cet outil ?
Cet outil permet de :
➡ Transformer un fichier texte (.txt) contenant des informations sur des poteaux
➡ En plusieurs fichiers Excel remplis automatiquement
➡ À partir dun template officiel UDS ou RSA
-----------------------
Le tout fonctionne directement dans le navigateur, sans installation.
🧩 Ce dont vous avez besoin
✅ Un fichier texte (.txt) avec les données des poteaux
✅ Le template Excel correspondant :
UDS.xlsx si vous choisissez UDS
RSA.xlsx si vous choisissez RSA
✅ Le nom du releveur
✅ La hauteur Bosch (ex: 1.5)
---------------------
🖥️ Comment utiliser loutil
Étape 1 Choisir le type de document
Sélectionnez le type:
uds → pour générer des grilles UDS
rsa → pour générer des grilles RSA
Étape 2 Importer les fichiers
Téléchargez le template Excel
Téléchargez le fichier texte (.txt)
Étape 3 Entrer les informations
Nom du releveur
Hauteur de l<appareil Bosch par rapport au sol(exemple : 1.5)
Étape 4 Cliquer sur "Run & Generate Excel files"
Loutil va :
Lire le fichier texte
Séparer chaque poteau
Appliquer les calculs nécessaires
Remplir le template Excel
Générer un fichier par poteau
Les fichiers apparaîtront dans la section Downloads.
📂 Comment doit être structuré le fichier texte ?
Chaque poteau doit être écrit sous forme :
poteau:PHO19-1 rue Church
diametre:0.113
longueur:100
hauteur_top:8.58
hauteur_bt1:6.27
il faut prendre le modèle texte rsa ou uds.
-------------------------------------
⚠ Très important :
Chaque ligne doit respecter le format :
variable:valeur
Les poteaux doivent être séparés par :
--------------------------------------
🧠 Ce que fait loutil automatiquement
✔ 1. Sépare chaque poteau
Chaque section entre --- devient un fichier Excel distinct.
✔ 2. Remplit automatiquement les cellules Excel
Chaque variable du fichier texte correspond à une cellule précise dans le template.
Exemple :
poteau:PHO19
→ sera placé dans la cellule prévue pour le nom du poteau.
✔ 3. Calcule automatiquement les hauteurs
Si une hauteur est donnée, loutil :
Applique la formule avec la hauteur Bosch
Arrondit le résultat
Formate correctement pour Excel
Si la valeur est tri, il applique un calcul spécial automatique.
✔ 4. Détermine automatiquement la classe selon la longueur
Si la longueur correspond à une valeur connue :
La classe est automatiquement ajoutée
La longueur peut être ajustée selon le type de bois
✔ 5. Génère automatiquement la date
En UDS : Nom du releveur + date
En RSA : Date seulement
📌 Règles importantes à respecter
🔹 1. Les noms des variables doivent être exacts
Exemple correct :
hauteur_bt1:
Si une faute dorthographe est faite :
hauteur_bt_1
→ La donnée ne sera pas utilisée.
🔹 2. Respecter les séparateurs
Chaque poteau doit être terminé par :
---
Sinon le dernier poteau peut ne pas être généré.
🔹 3. Format numérique
Utiliser :
6.25
Pas :
6,25
(Loutil convertira automatiquement pour Excel.)
📦 Ce que loutil NE fait PAS
❌ Ne corrige pas les fautes dans les variables
❌ Ne vérifie pas la cohérence des données
❌ Ne sauvegarde rien sur internet
Tout reste dans votre navigateur.
🔐 Sécurité
✔ Aucun envoi de données sur un serveur
✔ Tout est généré localement
✔ Fonctionne même sans internet après chargement
📊 Résumé simple
Votre fichier texte devient :
1 poteau = 1 fichier Excel
Automatiquement rempli, prêt à être utilisé.
🛠 En cas de problème
Si aucun fichier nest généré :
Vérifier que le template correspond au type choisi
Vérifier que le fichier texte contient bien poteau:
Vérifier la présence des ---
Vérifier lorthographe des variables
🎯 En une phrase
Cet outil transforme automatiquement un fichier texte structuré en plusieurs grilles Excel UDS ou RSA complétées, sans travail manuel.
Si tu veux, je peux aussi te faire :
📄 Une version prête à imprimer
🧑‍🏫 Une version ultra simplifiée pour un collègue
🏢 Une version professionnelle pour présentation à un gestionnaire
📘 Un guide utilisateur en PDF

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

116
UDS.html
View File

@ -1,59 +1,59 @@
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>Générer UDS/RSA</title>
<style>
body { font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial; padding: 20px; max-width: 900px; margin: auto; }
input, select, button, textarea { font-size: 14px; padding: 8px; margin: 6px 0; width: 100%; box-sizing: border-box; }
label { font-weight: 600; margin-top: 12px; display:block; }
.row { display:flex; gap:12px; }
.col { flex:1; }
pre { background:#f6f6f6; padding:12px; overflow:auto; }
.downloads a { display:block; margin:6px 0; }
.status { color: #444; margin:8px 0; }
</style>
</head>
<body>
<h1>Générer UDS/RSA</h1>
<p>Télécharge le <strong>template Excel</strong> (UDS.xlsx or RSA.xlsx) et le <strong>fichier texte</strong> (.txt). Entrer le nom du releveur et la hauteur de l'appareil de mesure.</p>
<label>Type de document</label>
<select id="typedoc">
<option value="uds">uds</option>
<option value="rsa">rsa</option>
</select>
<div class="row">
<div class="col">
<label>Template Excel (ex: UDS.xlsx or RSA.xlsx)</label>
<input type="file" id="template_excel" accept=".xlsx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
</div>
<div class="col">
<label>Fichier texte (input)</label>
<input type="file" id="txt_input" accept=".txt,text/plain" />
</div>
</div>
<label>Nom du releveur</label>
<input id="nom_releveur" placeholder="Antoine / Nom" />
<label>Hauteur Bosch (ex: 1.5)</label>
<input id="hauteur_bosch" placeholder="1.5" />
<button id="runBtn">Run & Generate Excel files</button>
<div class="status" id="status">Pyodide non chargé.</div>
<h3>Downloads</h3>
<div class="downloads" id="downloads"></div>
<h3>Log / Output</h3>
<pre id="log"></pre>
<script src="uds.js"></script>
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title>Générer UDS/RSA</title>
<style>
body { font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial; padding: 20px; max-width: 900px; margin: auto; }
input, select, button, textarea { font-size: 14px; padding: 8px; margin: 6px 0; width: 100%; box-sizing: border-box; }
label { font-weight: 600; margin-top: 12px; display:block; }
.row { display:flex; gap:12px; }
.col { flex:1; }
pre { background:#f6f6f6; padding:12px; overflow:auto; }
.downloads a { display:block; margin:6px 0; }
.status { color: #444; margin:8px 0; }
</style>
</head>
<body>
<h1>Générer UDS/RSA</h1>
<p>Télécharge le <strong>template Excel</strong> (UDS.xlsx or RSA.xlsx) et le <strong>fichier texte</strong> (.txt). Entrer le nom du releveur et la hauteur de l'appareil de mesure.</p>
<label>Type de document</label>
<select id="typedoc">
<option value="uds">uds</option>
<option value="rsa">rsa</option>
</select>
<div class="row">
<div class="col">
<label>Template Excel (ex: UDS.xlsx or RSA.xlsx)</label>
<input type="file" id="template_excel" accept=".xlsx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
</div>
<div class="col">
<label>Fichier texte (input)</label>
<input type="file" id="txt_input" accept=".txt,text/plain" />
</div>
</div>
<label>Nom du releveur</label>
<input id="nom_releveur" placeholder="Antoine / Nom" />
<label>Hauteur Bosch (ex: 1.5)</label>
<input id="hauteur_bosch" placeholder="1.5" />
<button id="runBtn">Run & Generate Excel files</button>
<div class="status" id="status">Pyodide non chargé.</div>
<h3>Downloads</h3>
<div class="downloads" id="downloads"></div>
<h3>Log / Output</h3>
<pre id="log"></pre>
<script src="uds.js"></script>

1316
UDS.py

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,9 @@
-Me débarasser du --- pour améliorer la fluidité
-Pouvoir plusieurs fichier texte si la personne prefere un fichier par poteau donc continuer java script
-Trouver une facon que sur la page web que l'option ''tri soit claire'
-Faire les portées(je ne sais aps comment ce que la logique doit être)
-faudrait que je me fasse un lien pour télécharger le template excel/rsa et les modeles de ficheir texte
-Me débarasser du --- pour améliorer la fluidité
-Pouvoir plusieurs fichier texte si la personne prefere un fichier par poteau donc continuer java script
-Trouver une facon que sur la page web que l'option ''tri soit claire'
-Faire les portées(je ne sais aps comment ce que la logique doit être)
-faudrait que je me fasse un lien pour télécharger le template excel/rsa et les modeles de ficheir texte

File diff suppressed because it is too large Load Diff

View File

@ -1,87 +1,88 @@
poteau:
nom_poteau:
adresse:
projet:
travaux: Toron Existant
diametre: 0.113
classification_travaux:
parc:
ville:
anomalie_1:
probleme_1:
lclc:
code_barre:
classe:
longueur:
nbe_transfo:
type_transfo:
equip:
annee:
annee_inspection:
hauteur_top:
hauteur_mt1:
hauteur_mt2:
hauteur_transfo:
hauteur_bt1:
hauteur_bt2:
hauteur_lampadaire:
hauteur_toron1:
hauteur_toron2:
conducteur_mt1:
phase_mt1:
dero_mt1:
conducteur_mt2:
phase_mt2:
deri_mt2:
conducteur_bt1:
visee_bt1:
deri_bt1:
conducteur_bt2:
visee_bt2:
deri_bt2:
proprio_toron1:
type_toron1:
nbe_de_câble_toron1:
diametre_toron1:
deg_sol_toron1:
croisement_toron1:
ancre_toron1:
proprio_toron2:
type_toron2:
nbe_de_câble_toron2:
diametre_toron2:
deg_sol_toron2:
croisement_toron2:
ancre_toron2:
tige_ancre1:
cosse_ancre1:
type_ancre1:
ecart_ancre1:
hauban1_ancre1:
hauban2_ancre1:
hauban3_ancre1:
etat_ancre1:
espace_dispo_ancre1:
tige_ancre2:
cosse_ancre2:
type_ancre2:
ecart_ancre2:
hauban1_ancre2:
hauban2_ancre2:
hauban3_ancre2:
etat_ancre2:
espace_dispo_ancre2:
note:
poteau:
nom_poteau:
adresse:
projet:
travaux: Toron Existant
diametre: 0.113
classification_travaux:
parc:
ville:
anomalie_1:
probleme_1:
lclc:
code_barre:
classe:
longueur:
nbe_transfo:
type_transfo:
equip:
annee:
annee_inspection:
hauteur_top:
hauteur_mt1:
hauteur_mt2:
hauteur_mt3:
hauteur_transfo:
hauteur_bt1:
hauteur_bt2:
hauteur_lampadaire:
hauteur_toron1:
hauteur_toron2:
conducteur_mt1:
phase_mt1:
dero_mt1:
conducteur_mt2:
phase_mt2:
deri_mt2:
conducteur_bt1:
visee_bt1:
deri_bt1:
conducteur_bt2:
visee_bt2:
deri_bt2:
proprio_toron1:
type_toron1:
nbe_de_câble_toron1:
diametre_toron1:
deg_sol_toron1:
croisement_toron1:
ancre_toron1:
proprio_toron2:
type_toron2:
nbe_de_câble_toron2:
diametre_toron2:
deg_sol_toron2:
croisement_toron2:
ancre_toron2:
tige_ancre1:
cosse_ancre1:
type_ancre1:
ecart_ancre1:
hauban1_ancre1:
hauban2_ancre1:
hauban3_ancre1:
etat_ancre1:
espace_dispo_ancre1:
tige_ancre2:
cosse_ancre2:
type_ancre2:
ecart_ancre2:
hauban1_ancre2:
hauban2_ancre2:
hauban3_ancre2:
etat_ancre2:
espace_dispo_ancre2:
note:
date:

View File

@ -1,40 +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:
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()

202
test.txt
View File

@ -1,102 +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
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
---

190
uds.js
View File

@ -1,95 +1,95 @@
const statusEl = document.getElementById("status");
const logEl = document.getElementById("log");
const downloadsEl = document.getElementById("downloads");
const runBtn = document.getElementById("runBtn");
let pyodide = null;
async function initPyodide() {
statusEl.textContent = "Chargement de Pyodide ... (cela peut prendre 10-20s la première fois)";
pyodide = await loadPyodide();
statusEl.textContent = "Pyodide chargé. Installation de dépendances (openpyxl)...";
await pyodide.loadPackage("micropip");
const micropip = pyodide.pyimport("micropip");
await micropip.install("openpyxl");
statusEl.textContent = "Prêt — openpyxl installé."; //load micropip qui permet d'accéder a openpyxl qui sert a écrire dans les excels.
}
// load Pyodide script tag dynamically
(async () => {
const s = document.createElement("script");
s.src = "https://cdn.jsdelivr.net/pyodide/v0.24.1/full/pyodide.js";
s.onload = async () => { await initPyodide(); };
document.head.appendChild(s);
})();
function log(msg) {
logEl.textContent += msg + "\n";
logEl.scrollTop = logEl.scrollHeight;
}
function createDownloadLink(filename, bytes) {
// bytes is Uint8Array or ArrayBuffer-like
const blob = new Blob([bytes], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = filename;
a.textContent = `Download ${filename}`;
downloadsEl.appendChild(a);
}
runBtn.addEventListener("click", async () => {
downloadsEl.innerHTML = "";
logEl.textContent = "";
if (!pyodide) { alert("Pyodide n'est pas encore prêt."); return; }
const templateFile = document.getElementById("template_excel").files[0];
const txtFile = document.getElementById("txt_input").files[0];
const typeDoc = document.getElementById("typedoc").value;
const nom_releveur = document.getElementById("nom_releveur").value || "";
const hauteur_bosch = document.getElementById("hauteur_bosch").value || "0";
if (!templateFile) { alert("Veuillez uploader le template Excel."); return; }
if (!txtFile) { alert("Veuillez uploader le fichier texte."); return; }
statusEl.textContent = "Lecture des fichiers (navigateur)...";
// read files on JS side
const [tmplBuf, txtStr] = await Promise.all([
templateFile.arrayBuffer(),
txtFile.text()
]);
// pass into pyodide globals:
// set template bytes as a Uint8Array in globals so Python can get bytes via to_py()
pyodide.globals.set("template_uint8", new Uint8Array(tmplBuf));
pyodide.globals.set("txt_content", txtStr);
pyodide.globals.set("typeDoc", typeDoc);
pyodide.globals.set("nom_du_releveur", nom_releveur);
pyodide.globals.set("hauteur_bosch", hauteur_bosch);
statusEl.textContent = "Exécution du script Python (Pyodide)...";
log("Lancement du traitement...");
try {
const response = await fetch('UDS - Copie.py');
const python_core_code = await response.text();
await pyodide.runPythonAsync(python_core_code);
statusEl.textContent = "Terminé — fichiers générés.";
log("Terminé.");
} catch (err) {
console.error(err);
statusEl.textContent = "Erreur pendant l'exécution (voir log).";
log("ERREUR: " + err);
} finally {
try {
pyodide.globals.delete("template_uint8");
pyodide.globals.delete("txt_content");
pyodide.globals.delete("typeDoc");
pyodide.globals.delete("nom_du_releveur");
pyodide.globals.delete("hauteur_bosch");
} catch(e) {}
}
});
const statusEl = document.getElementById("status");
const logEl = document.getElementById("log");
const downloadsEl = document.getElementById("downloads");
const runBtn = document.getElementById("runBtn");
let pyodide = null;
async function initPyodide() {
statusEl.textContent = "Chargement de Pyodide ... (cela peut prendre 10-20s la première fois)";
pyodide = await loadPyodide();
statusEl.textContent = "Pyodide chargé. Installation de dépendances (openpyxl)...";
await pyodide.loadPackage("micropip");
const micropip = pyodide.pyimport("micropip");
await micropip.install("openpyxl");
statusEl.textContent = "Prêt — openpyxl installé."; //load micropip qui permet d'accéder a openpyxl qui sert a écrire dans les excels.
}
// load Pyodide script tag dynamically
(async () => {
const s = document.createElement("script");
s.src = "https://cdn.jsdelivr.net/pyodide/v0.24.1/full/pyodide.js";
s.onload = async () => { await initPyodide(); };
document.head.appendChild(s);
})();
function log(msg) {
logEl.textContent += msg + "\n";
logEl.scrollTop = logEl.scrollHeight;
}
function createDownloadLink(filename, bytes) {
// bytes is Uint8Array or ArrayBuffer-like
const blob = new Blob([bytes], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = filename;
a.textContent = `Download ${filename}`;
downloadsEl.appendChild(a);
}
runBtn.addEventListener("click", async () => {
downloadsEl.innerHTML = "";
logEl.textContent = "";
if (!pyodide) { alert("Pyodide n'est pas encore prêt."); return; }
const templateFile = document.getElementById("template_excel").files[0];
const txtFile = document.getElementById("txt_input").files[0];
const typeDoc = document.getElementById("typedoc").value;
const nom_releveur = document.getElementById("nom_releveur").value || "";
const hauteur_bosch = document.getElementById("hauteur_bosch").value || "0";
if (!templateFile) { alert("Veuillez uploader le template Excel."); return; }
if (!txtFile) { alert("Veuillez uploader le fichier texte."); return; }
statusEl.textContent = "Lecture des fichiers (navigateur)...";
// read files on JS side
const [tmplBuf, txtStr] = await Promise.all([
templateFile.arrayBuffer(),
txtFile.text()
]);
// pass into pyodide globals:
// set template bytes as a Uint8Array in globals so Python can get bytes via to_py()
pyodide.globals.set("template_uint8", new Uint8Array(tmplBuf));
pyodide.globals.set("txt_content", txtStr);
pyodide.globals.set("typeDoc", typeDoc);
pyodide.globals.set("nom_du_releveur", nom_releveur);
pyodide.globals.set("hauteur_bosch", hauteur_bosch);
statusEl.textContent = "Exécution du script Python (Pyodide)...";
log("Lancement du traitement...");
try {
const response = await fetch('UDS - Copie.py');
const python_core_code = await response.text();
await pyodide.runPythonAsync(python_core_code);
statusEl.textContent = "Terminé — fichiers générés.";
log("Terminé.");
} catch (err) {
console.error(err);
statusEl.textContent = "Erreur pendant l'exécution (voir log).";
log("ERREUR: " + err);
} finally {
try {
pyodide.globals.delete("template_uint8");
pyodide.globals.delete("txt_content");
pyodide.globals.delete("typeDoc");
pyodide.globals.delete("nom_du_releveur");
pyodide.globals.delete("hauteur_bosch");
} catch(e) {}
}
});

View File

@ -1,48 +1,48 @@
Premiere étape est de pouvoir lire les lignes du fichier PDF et d epouvor copier ces lignes la dans des cellules spécifique, je me demande si je peux faire
en sorte de rendre le programme plus flexible en étant capable de lire les cellule spécifiques avec des espace overts et pouvoir changer l'un a l'autre
comme ca je peux analyser le ficher avec les cellules ouverts et ensuite passer à l'autre cellule ouvert. aussi pour le pdf je pense qu'au lieu de faire ligne 1 à ligne 2 pour le lire
il faudrait que la lecture se fasse par le nom dans le fichier pdf par example ligne 1 sera écrit nom du poteau: PBD351 rue roy il faudrait que la lecture trigger ''au nom du poteau'' est qu ça correspond
à la cellule spécifique qui sera lut est écrit donc ''nom du poteau'' correspondera toujours à la même cellule peu importe. le création et l'écrite du fichier excel devrait être indépendant du fichier pdf qui appelera l
fichier excel.
Dans le fichier PDF il y aura deux forme de modèle RSA et UDS,deux fonction different qui sera appelé en lisant la premiere ligne qui sera le titre:RSA ou UDS. je ne sais pas si le programme se rémémore les ligne
mais sinon ils seront mit dans un tableau avant de tomber dans la fonction. dans la fonction le but se sera de ordonner les données pour l'écriture en order dans la cellule qui va créer l'excel. Le nom de l'excel
sera donnée par la valeur du nom du poteau. Les duex fonctions seront RSA ou excel en entrant avec le tableau. Je dois aussi spécifier le nombre de fichier pdf que je dois analyser ou le nombre de page, je ne sais
si il peut lire le nombre de page spécifiquement ou il y a moyen de créer un fichier par page avec le pdf.je dois rentrer le nombre de pdf à lire.
Dans le PY de l'excel, je vais devoir créer un excel qui est une copie de l'excel(toujours copier l'excel qui est vide) (je ne sais pas si je peux copier l'excel pour l'uds sans chier les macros), ensuite le gros truc est que je ne sais pas
si je peux repérer les cellules qui sont vides et ensuite détecter ca et pouvoir écrire et ensuite passer à la prochaine cellule vide si je peux faire ca donc ça devrait être facile. Je dois rentrer avec le nombre de fichier que je vuex faire.
-----------------------------------------
✅ Objectif global
Lire un ou plusieurs fichiers PDF, en extraire les données selon un format RSA ou UDS, détecter des mots-clés (comme "Nom du poteau"),
organiser les données dans un tableau structuré, et remplir un fichier Excel modèle dans les bonnes cellules. Tu veux :
Lire un PDF page par page (ou fichier par fichier).
Identifier automatiquement si cest un modèle RSA ou UDS.
Extraire des champs (ex : "Nom du poteau", "Adresse", etc.) avec leurs valeurs.
Copier les valeurs extraites dans un modèle Excel existant, en remplissant les cellules vides spécifiques.
Générer un nouveau fichier Excel par entrée, avec le nom basé sur la valeur du champ "Nom du poteau".
🧩 Étapes proposées
Étape 1 : Lecture du PDF
Utiliser PyMuPDF (alias fitz) ou pdfplumber pour lire le contenu texte ligne par ligne.
Détecter le type de modèle ("RSA" ou "UDS") sur la première ligne.
Récupérer les lignes avec des mots-clés connus : par ex. "Nom du poteau: PBD351 rue Roy".
Flexibilité et extensions possibles
✅ Tu peux détecter les cellules vides avec if ws[cellule].value is None:
✅ Tu peux adapter les correspondances avec un dictionnaire par type de modèle (RSA, UDS)
✅ Le code est indépendant du contenu PDF il extrait et transforme en dictionnaire générique
✅ Tu peux entrer le nombre de fichiers à traiter, ou le nombre de pages à lire
Premiere étape est de pouvoir lire les lignes du fichier PDF et d epouvor copier ces lignes la dans des cellules spécifique, je me demande si je peux faire
en sorte de rendre le programme plus flexible en étant capable de lire les cellule spécifiques avec des espace overts et pouvoir changer l'un a l'autre
comme ca je peux analyser le ficher avec les cellules ouverts et ensuite passer à l'autre cellule ouvert. aussi pour le pdf je pense qu'au lieu de faire ligne 1 à ligne 2 pour le lire
il faudrait que la lecture se fasse par le nom dans le fichier pdf par example ligne 1 sera écrit nom du poteau: PBD351 rue roy il faudrait que la lecture trigger ''au nom du poteau'' est qu ça correspond
à la cellule spécifique qui sera lut est écrit donc ''nom du poteau'' correspondera toujours à la même cellule peu importe. le création et l'écrite du fichier excel devrait être indépendant du fichier pdf qui appelera l
fichier excel.
Dans le fichier PDF il y aura deux forme de modèle RSA et UDS,deux fonction different qui sera appelé en lisant la premiere ligne qui sera le titre:RSA ou UDS. je ne sais pas si le programme se rémémore les ligne
mais sinon ils seront mit dans un tableau avant de tomber dans la fonction. dans la fonction le but se sera de ordonner les données pour l'écriture en order dans la cellule qui va créer l'excel. Le nom de l'excel
sera donnée par la valeur du nom du poteau. Les duex fonctions seront RSA ou excel en entrant avec le tableau. Je dois aussi spécifier le nombre de fichier pdf que je dois analyser ou le nombre de page, je ne sais
si il peut lire le nombre de page spécifiquement ou il y a moyen de créer un fichier par page avec le pdf.je dois rentrer le nombre de pdf à lire.
Dans le PY de l'excel, je vais devoir créer un excel qui est une copie de l'excel(toujours copier l'excel qui est vide) (je ne sais pas si je peux copier l'excel pour l'uds sans chier les macros), ensuite le gros truc est que je ne sais pas
si je peux repérer les cellules qui sont vides et ensuite détecter ca et pouvoir écrire et ensuite passer à la prochaine cellule vide si je peux faire ca donc ça devrait être facile. Je dois rentrer avec le nombre de fichier que je vuex faire.
-----------------------------------------
✅ Objectif global
Lire un ou plusieurs fichiers PDF, en extraire les données selon un format RSA ou UDS, détecter des mots-clés (comme "Nom du poteau"),
organiser les données dans un tableau structuré, et remplir un fichier Excel modèle dans les bonnes cellules. Tu veux :
Lire un PDF page par page (ou fichier par fichier).
Identifier automatiquement si cest un modèle RSA ou UDS.
Extraire des champs (ex : "Nom du poteau", "Adresse", etc.) avec leurs valeurs.
Copier les valeurs extraites dans un modèle Excel existant, en remplissant les cellules vides spécifiques.
Générer un nouveau fichier Excel par entrée, avec le nom basé sur la valeur du champ "Nom du poteau".
🧩 Étapes proposées
Étape 1 : Lecture du PDF
Utiliser PyMuPDF (alias fitz) ou pdfplumber pour lire le contenu texte ligne par ligne.
Détecter le type de modèle ("RSA" ou "UDS") sur la première ligne.
Récupérer les lignes avec des mots-clés connus : par ex. "Nom du poteau: PBD351 rue Roy".
Flexibilité et extensions possibles
✅ Tu peux détecter les cellules vides avec if ws[cellule].value is None:
✅ Tu peux adapter les correspondances avec un dictionnaire par type de modèle (RSA, UDS)
✅ Le code est indépendant du contenu PDF il extrait et transforme en dictionnaire générique
✅ Tu peux entrer le nombre de fichiers à traiter, ou le nombre de pages à lire