dfsf
This commit is contained in:
parent
d79999c56b
commit
8de9c150d5
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -186,3 +186,4 @@ cython_debug/
|
||||||
hs_err_pid*
|
hs_err_pid*
|
||||||
replay_pid*
|
replay_pid*
|
||||||
|
|
||||||
|
RSA.xlsx
|
||||||
|
|
|
||||||
3
.idea/.gitignore
vendored
Normal file
3
.idea/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
6
.idea/inspectionProfiles/profiles_settings.xml
Normal file
6
.idea/inspectionProfiles/profiles_settings.xml
Normal 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
7
.idea/misc.xml
Normal 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
8
.idea/modules.xml
Normal 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
10
.idea/pythonProject2.iml
Normal 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>
|
||||||
|
|
@ -1,222 +1,222 @@
|
||||||
📄 FICHE SIMPLE – Générateur UDS / RSA
|
📄 FICHE SIMPLE – Générateur UDS / RSA
|
||||||
🎯 À quoi sert cet outil ?
|
🎯 À quoi sert cet outil ?
|
||||||
|
|
||||||
Cet outil permet de :
|
Cet outil permet de :
|
||||||
|
|
||||||
➡ Transformer un fichier texte (.txt) contenant des informations sur des poteaux
|
➡ Transformer un fichier texte (.txt) contenant des informations sur des poteaux
|
||||||
➡ En plusieurs fichiers Excel remplis automatiquement
|
➡ En plusieurs fichiers Excel remplis automatiquement
|
||||||
➡ À partir d’un template officiel UDS ou RSA
|
➡ À partir d’un template officiel UDS ou RSA
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
Le tout fonctionne directement dans le navigateur, sans installation.
|
Le tout fonctionne directement dans le navigateur, sans installation.
|
||||||
|
|
||||||
🧩 Ce dont vous avez besoin
|
🧩 Ce dont vous avez besoin
|
||||||
|
|
||||||
✅ Un fichier texte (.txt) avec les données des poteaux
|
✅ Un fichier texte (.txt) avec les données des poteaux
|
||||||
|
|
||||||
✅ Le template Excel correspondant :
|
✅ Le template Excel correspondant :
|
||||||
|
|
||||||
UDS.xlsx si vous choisissez UDS
|
UDS.xlsx si vous choisissez UDS
|
||||||
|
|
||||||
RSA.xlsx si vous choisissez RSA
|
RSA.xlsx si vous choisissez RSA
|
||||||
|
|
||||||
✅ Le nom du releveur
|
✅ Le nom du releveur
|
||||||
|
|
||||||
✅ La hauteur Bosch (ex: 1.5)
|
✅ La hauteur Bosch (ex: 1.5)
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
🖥️ Comment utiliser l’outil
|
🖥️ Comment utiliser l’outil
|
||||||
|
|
||||||
|
|
||||||
Étape 1 – Choisir le type de document
|
Étape 1 – Choisir le type de document
|
||||||
|
|
||||||
Sélectionnez le type:
|
Sélectionnez le type:
|
||||||
|
|
||||||
uds → pour générer des grilles UDS
|
uds → pour générer des grilles UDS
|
||||||
|
|
||||||
rsa → pour générer des grilles RSA
|
rsa → pour générer des grilles RSA
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Étape 2 – Importer les fichiers
|
Étape 2 – Importer les fichiers
|
||||||
|
|
||||||
Téléchargez le template Excel
|
Téléchargez le template Excel
|
||||||
|
|
||||||
Téléchargez le fichier texte (.txt)
|
Téléchargez le fichier texte (.txt)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Étape 3 – Entrer les informations
|
Étape 3 – Entrer les informations
|
||||||
|
|
||||||
Nom du releveur
|
Nom du releveur
|
||||||
|
|
||||||
Hauteur de l<appareil Bosch par rapport au sol(exemple : 1.5)
|
Hauteur de l<appareil Bosch par rapport au sol(exemple : 1.5)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Étape 4 – Cliquer sur "Run & Generate Excel files"
|
Étape 4 – Cliquer sur "Run & Generate Excel files"
|
||||||
|
|
||||||
L’outil va :
|
L’outil va :
|
||||||
|
|
||||||
Lire le fichier texte
|
Lire le fichier texte
|
||||||
|
|
||||||
Séparer chaque poteau
|
Séparer chaque poteau
|
||||||
|
|
||||||
Appliquer les calculs nécessaires
|
Appliquer les calculs nécessaires
|
||||||
|
|
||||||
Remplir le template Excel
|
Remplir le template Excel
|
||||||
|
|
||||||
Générer un fichier par poteau
|
Générer un fichier par poteau
|
||||||
|
|
||||||
Les fichiers apparaîtront dans la section Downloads.
|
Les fichiers apparaîtront dans la section Downloads.
|
||||||
|
|
||||||
📂 Comment doit être structuré le fichier texte ?
|
📂 Comment doit être structuré le fichier texte ?
|
||||||
|
|
||||||
Chaque poteau doit être écrit sous forme :
|
Chaque poteau doit être écrit sous forme :
|
||||||
|
|
||||||
poteau:PHO19-1 rue Church
|
poteau:PHO19-1 rue Church
|
||||||
diametre:0.113
|
diametre:0.113
|
||||||
longueur:100
|
longueur:100
|
||||||
hauteur_top:8.58
|
hauteur_top:8.58
|
||||||
hauteur_bt1:6.27
|
hauteur_bt1:6.27
|
||||||
|
|
||||||
il faut prendre le modèle texte rsa ou uds.
|
il faut prendre le modèle texte rsa ou uds.
|
||||||
|
|
||||||
|
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
⚠ Très important :
|
⚠ Très important :
|
||||||
|
|
||||||
Chaque ligne doit respecter le format :
|
Chaque ligne doit respecter le format :
|
||||||
|
|
||||||
variable:valeur
|
variable:valeur
|
||||||
|
|
||||||
Les poteaux doivent être séparés par :
|
Les poteaux doivent être séparés par :
|
||||||
|
|
||||||
--------------------------------------
|
--------------------------------------
|
||||||
|
|
||||||
|
|
||||||
🧠 Ce que fait l’outil automatiquement
|
🧠 Ce que fait l’outil automatiquement
|
||||||
|
|
||||||
|
|
||||||
✔ 1. Sépare chaque poteau
|
✔ 1. Sépare chaque poteau
|
||||||
|
|
||||||
Chaque section entre --- devient un fichier Excel distinct.
|
Chaque section entre --- devient un fichier Excel distinct.
|
||||||
|
|
||||||
✔ 2. Remplit automatiquement les cellules Excel
|
✔ 2. Remplit automatiquement les cellules Excel
|
||||||
|
|
||||||
Chaque variable du fichier texte correspond à une cellule précise dans le template.
|
Chaque variable du fichier texte correspond à une cellule précise dans le template.
|
||||||
|
|
||||||
Exemple :
|
Exemple :
|
||||||
|
|
||||||
poteau:PHO19
|
poteau:PHO19
|
||||||
|
|
||||||
→ sera placé dans la cellule prévue pour le nom du poteau.
|
→ sera placé dans la cellule prévue pour le nom du poteau.
|
||||||
|
|
||||||
✔ 3. Calcule automatiquement les hauteurs
|
✔ 3. Calcule automatiquement les hauteurs
|
||||||
|
|
||||||
Si une hauteur est donnée, l’outil :
|
Si une hauteur est donnée, l’outil :
|
||||||
|
|
||||||
Applique la formule avec la hauteur Bosch
|
Applique la formule avec la hauteur Bosch
|
||||||
|
|
||||||
Arrondit le résultat
|
Arrondit le résultat
|
||||||
|
|
||||||
Formate correctement pour Excel
|
Formate correctement pour Excel
|
||||||
|
|
||||||
Si la valeur est tri, il applique un calcul spécial automatique.
|
Si la valeur est tri, il applique un calcul spécial automatique.
|
||||||
|
|
||||||
✔ 4. Détermine automatiquement la classe selon la longueur
|
✔ 4. Détermine automatiquement la classe selon la longueur
|
||||||
|
|
||||||
Si la longueur correspond à une valeur connue :
|
Si la longueur correspond à une valeur connue :
|
||||||
|
|
||||||
La classe est automatiquement ajoutée
|
La classe est automatiquement ajoutée
|
||||||
|
|
||||||
La longueur peut être ajustée selon le type de bois
|
La longueur peut être ajustée selon le type de bois
|
||||||
|
|
||||||
✔ 5. Génère automatiquement la date
|
✔ 5. Génère automatiquement la date
|
||||||
|
|
||||||
En UDS : Nom du releveur + date
|
En UDS : Nom du releveur + date
|
||||||
|
|
||||||
En RSA : Date seulement
|
En RSA : Date seulement
|
||||||
|
|
||||||
📌 Règles importantes à respecter
|
📌 Règles importantes à respecter
|
||||||
🔹 1. Les noms des variables doivent être exacts
|
🔹 1. Les noms des variables doivent être exacts
|
||||||
|
|
||||||
Exemple correct :
|
Exemple correct :
|
||||||
|
|
||||||
hauteur_bt1:
|
hauteur_bt1:
|
||||||
|
|
||||||
Si une faute d’orthographe est faite :
|
Si une faute d’orthographe est faite :
|
||||||
|
|
||||||
hauteur_bt_1
|
hauteur_bt_1
|
||||||
|
|
||||||
→ La donnée ne sera pas utilisée.
|
→ La donnée ne sera pas utilisée.
|
||||||
|
|
||||||
🔹 2. Respecter les séparateurs
|
🔹 2. Respecter les séparateurs
|
||||||
|
|
||||||
Chaque poteau doit être terminé par :
|
Chaque poteau doit être terminé par :
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Sinon le dernier poteau peut ne pas être généré.
|
Sinon le dernier poteau peut ne pas être généré.
|
||||||
|
|
||||||
🔹 3. Format numérique
|
🔹 3. Format numérique
|
||||||
|
|
||||||
Utiliser :
|
Utiliser :
|
||||||
|
|
||||||
6.25
|
6.25
|
||||||
|
|
||||||
Pas :
|
Pas :
|
||||||
|
|
||||||
6,25
|
6,25
|
||||||
|
|
||||||
(L’outil convertira automatiquement pour Excel.)
|
(L’outil convertira automatiquement pour Excel.)
|
||||||
|
|
||||||
📦 Ce que l’outil NE fait PAS
|
📦 Ce que l’outil NE fait PAS
|
||||||
|
|
||||||
❌ Ne corrige pas les fautes dans les variables
|
❌ Ne corrige pas les fautes dans les variables
|
||||||
❌ Ne vérifie pas la cohérence des données
|
❌ Ne vérifie pas la cohérence des données
|
||||||
❌ Ne sauvegarde rien sur internet
|
❌ Ne sauvegarde rien sur internet
|
||||||
|
|
||||||
Tout reste dans votre navigateur.
|
Tout reste dans votre navigateur.
|
||||||
|
|
||||||
🔐 Sécurité
|
🔐 Sécurité
|
||||||
|
|
||||||
✔ Aucun envoi de données sur un serveur
|
✔ Aucun envoi de données sur un serveur
|
||||||
✔ Tout est généré localement
|
✔ Tout est généré localement
|
||||||
✔ Fonctionne même sans internet après chargement
|
✔ Fonctionne même sans internet après chargement
|
||||||
|
|
||||||
📊 Résumé simple
|
📊 Résumé simple
|
||||||
|
|
||||||
Votre fichier texte devient :
|
Votre fichier texte devient :
|
||||||
|
|
||||||
1 poteau = 1 fichier Excel
|
1 poteau = 1 fichier Excel
|
||||||
|
|
||||||
Automatiquement rempli, prêt à être utilisé.
|
Automatiquement rempli, prêt à être utilisé.
|
||||||
|
|
||||||
🛠 En cas de problème
|
🛠 En cas de problème
|
||||||
|
|
||||||
Si aucun fichier n’est généré :
|
Si aucun fichier n’est généré :
|
||||||
|
|
||||||
Vérifier que le template correspond au type choisi
|
Vérifier que le template correspond au type choisi
|
||||||
|
|
||||||
Vérifier que le fichier texte contient bien poteau:
|
Vérifier que le fichier texte contient bien poteau:
|
||||||
|
|
||||||
Vérifier la présence des ---
|
Vérifier la présence des ---
|
||||||
|
|
||||||
Vérifier l’orthographe des variables
|
Vérifier l’orthographe des variables
|
||||||
|
|
||||||
🎯 En une phrase
|
🎯 En une phrase
|
||||||
|
|
||||||
Cet outil transforme automatiquement un fichier texte structuré en plusieurs grilles Excel UDS ou RSA complétées, sans travail manuel.
|
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 :
|
Si tu veux, je peux aussi te faire :
|
||||||
|
|
||||||
📄 Une version prête à imprimer
|
📄 Une version prête à imprimer
|
||||||
|
|
||||||
🧑🏫 Une version ultra simplifiée pour un collègue
|
🧑🏫 Une version ultra simplifiée pour un collègue
|
||||||
|
|
||||||
🏢 Une version professionnelle pour présentation à un gestionnaire
|
🏢 Une version professionnelle pour présentation à un gestionnaire
|
||||||
|
|
||||||
📘 Un guide utilisateur en PDF
|
📘 Un guide utilisateur en PDF
|
||||||
|
|
|
||||||
1667
RSA_UDS.txt
1667
RSA_UDS.txt
File diff suppressed because it is too large
Load Diff
1331
UDS - Copie.py
1331
UDS - Copie.py
File diff suppressed because it is too large
Load Diff
116
UDS.html
116
UDS.html
|
|
@ -1,59 +1,59 @@
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||||
<title>Générer UDS/RSA</title>
|
<title>Générer UDS/RSA</title>
|
||||||
<style>
|
<style>
|
||||||
body { font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial; padding: 20px; max-width: 900px; margin: auto; }
|
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; }
|
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; }
|
label { font-weight: 600; margin-top: 12px; display:block; }
|
||||||
.row { display:flex; gap:12px; }
|
.row { display:flex; gap:12px; }
|
||||||
.col { flex:1; }
|
.col { flex:1; }
|
||||||
pre { background:#f6f6f6; padding:12px; overflow:auto; }
|
pre { background:#f6f6f6; padding:12px; overflow:auto; }
|
||||||
.downloads a { display:block; margin:6px 0; }
|
.downloads a { display:block; margin:6px 0; }
|
||||||
.status { color: #444; margin:8px 0; }
|
.status { color: #444; margin:8px 0; }
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>Générer UDS/RSA</h1>
|
<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>
|
<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>
|
<label>Type de document</label>
|
||||||
<select id="typedoc">
|
<select id="typedoc">
|
||||||
<option value="uds">uds</option>
|
<option value="uds">uds</option>
|
||||||
<option value="rsa">rsa</option>
|
<option value="rsa">rsa</option>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<label>Template Excel (ex: UDS.xlsx or RSA.xlsx)</label>
|
<label>Template Excel (ex: UDS.xlsx or RSA.xlsx)</label>
|
||||||
<input type="file" id="template_excel" accept=".xlsx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
|
<input type="file" id="template_excel" accept=".xlsx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<label>Fichier texte (input)</label>
|
<label>Fichier texte (input)</label>
|
||||||
<input type="file" id="txt_input" accept=".txt,text/plain" />
|
<input type="file" id="txt_input" accept=".txt,text/plain" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<label>Nom du releveur</label>
|
<label>Nom du releveur</label>
|
||||||
<input id="nom_releveur" placeholder="Antoine / Nom" />
|
<input id="nom_releveur" placeholder="Antoine / Nom" />
|
||||||
|
|
||||||
<label>Hauteur Bosch (ex: 1.5)</label>
|
<label>Hauteur Bosch (ex: 1.5)</label>
|
||||||
<input id="hauteur_bosch" placeholder="1.5" />
|
<input id="hauteur_bosch" placeholder="1.5" />
|
||||||
|
|
||||||
<button id="runBtn">Run & Generate Excel files</button>
|
<button id="runBtn">Run & Generate Excel files</button>
|
||||||
|
|
||||||
<div class="status" id="status">Pyodide non chargé.</div>
|
<div class="status" id="status">Pyodide non chargé.</div>
|
||||||
|
|
||||||
<h3>Downloads</h3>
|
<h3>Downloads</h3>
|
||||||
<div class="downloads" id="downloads"></div>
|
<div class="downloads" id="downloads"></div>
|
||||||
|
|
||||||
<h3>Log / Output</h3>
|
<h3>Log / Output</h3>
|
||||||
<pre id="log"></pre>
|
<pre id="log"></pre>
|
||||||
|
|
||||||
<script src="uds.js"></script>
|
<script src="uds.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
18
amélioration
18
amélioration
|
|
@ -1,9 +1,9 @@
|
||||||
-Me débarasser du --- pour améliorer la fluidité
|
-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
|
-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'
|
-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)
|
-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
|
-faudrait que je me fasse un lien pour télécharger le template excel/rsa et les modeles de ficheir texte
|
||||||
|
|
|
||||||
1332
checkpoint.py
1332
checkpoint.py
File diff suppressed because it is too large
Load Diff
|
|
@ -1,87 +1,88 @@
|
||||||
poteau:
|
poteau:
|
||||||
nom_poteau:
|
nom_poteau:
|
||||||
adresse:
|
adresse:
|
||||||
projet:
|
projet:
|
||||||
travaux: Toron Existant
|
travaux: Toron Existant
|
||||||
diametre: 0.113
|
diametre: 0.113
|
||||||
classification_travaux:
|
classification_travaux:
|
||||||
parc:
|
parc:
|
||||||
ville:
|
ville:
|
||||||
|
|
||||||
anomalie_1:
|
anomalie_1:
|
||||||
probleme_1:
|
probleme_1:
|
||||||
|
|
||||||
lclc:
|
lclc:
|
||||||
code_barre:
|
code_barre:
|
||||||
classe:
|
classe:
|
||||||
longueur:
|
longueur:
|
||||||
nbe_transfo:
|
nbe_transfo:
|
||||||
type_transfo:
|
type_transfo:
|
||||||
equip:
|
equip:
|
||||||
annee:
|
annee:
|
||||||
annee_inspection:
|
annee_inspection:
|
||||||
|
|
||||||
hauteur_top:
|
hauteur_top:
|
||||||
hauteur_mt1:
|
hauteur_mt1:
|
||||||
hauteur_mt2:
|
hauteur_mt2:
|
||||||
hauteur_transfo:
|
hauteur_mt3:
|
||||||
hauteur_bt1:
|
hauteur_transfo:
|
||||||
hauteur_bt2:
|
hauteur_bt1:
|
||||||
hauteur_lampadaire:
|
hauteur_bt2:
|
||||||
hauteur_toron1:
|
hauteur_lampadaire:
|
||||||
hauteur_toron2:
|
hauteur_toron1:
|
||||||
|
hauteur_toron2:
|
||||||
conducteur_mt1:
|
|
||||||
phase_mt1:
|
conducteur_mt1:
|
||||||
dero_mt1:
|
phase_mt1:
|
||||||
|
dero_mt1:
|
||||||
conducteur_mt2:
|
|
||||||
phase_mt2:
|
conducteur_mt2:
|
||||||
deri_mt2:
|
phase_mt2:
|
||||||
|
deri_mt2:
|
||||||
conducteur_bt1:
|
|
||||||
visee_bt1:
|
conducteur_bt1:
|
||||||
deri_bt1:
|
visee_bt1:
|
||||||
|
deri_bt1:
|
||||||
conducteur_bt2:
|
|
||||||
visee_bt2:
|
conducteur_bt2:
|
||||||
deri_bt2:
|
visee_bt2:
|
||||||
|
deri_bt2:
|
||||||
proprio_toron1:
|
|
||||||
type_toron1:
|
proprio_toron1:
|
||||||
nbe_de_câble_toron1:
|
type_toron1:
|
||||||
diametre_toron1:
|
nbe_de_câble_toron1:
|
||||||
deg_sol_toron1:
|
diametre_toron1:
|
||||||
croisement_toron1:
|
deg_sol_toron1:
|
||||||
ancre_toron1:
|
croisement_toron1:
|
||||||
|
ancre_toron1:
|
||||||
proprio_toron2:
|
|
||||||
type_toron2:
|
proprio_toron2:
|
||||||
nbe_de_câble_toron2:
|
type_toron2:
|
||||||
diametre_toron2:
|
nbe_de_câble_toron2:
|
||||||
deg_sol_toron2:
|
diametre_toron2:
|
||||||
croisement_toron2:
|
deg_sol_toron2:
|
||||||
ancre_toron2:
|
croisement_toron2:
|
||||||
|
ancre_toron2:
|
||||||
tige_ancre1:
|
|
||||||
cosse_ancre1:
|
tige_ancre1:
|
||||||
type_ancre1:
|
cosse_ancre1:
|
||||||
ecart_ancre1:
|
type_ancre1:
|
||||||
hauban1_ancre1:
|
ecart_ancre1:
|
||||||
hauban2_ancre1:
|
hauban1_ancre1:
|
||||||
hauban3_ancre1:
|
hauban2_ancre1:
|
||||||
etat_ancre1:
|
hauban3_ancre1:
|
||||||
espace_dispo_ancre1:
|
etat_ancre1:
|
||||||
|
espace_dispo_ancre1:
|
||||||
tige_ancre2:
|
|
||||||
cosse_ancre2:
|
tige_ancre2:
|
||||||
type_ancre2:
|
cosse_ancre2:
|
||||||
ecart_ancre2:
|
type_ancre2:
|
||||||
hauban1_ancre2:
|
ecart_ancre2:
|
||||||
hauban2_ancre2:
|
hauban1_ancre2:
|
||||||
hauban3_ancre2:
|
hauban2_ancre2:
|
||||||
etat_ancre2:
|
hauban3_ancre2:
|
||||||
espace_dispo_ancre2:
|
etat_ancre2:
|
||||||
|
espace_dispo_ancre2:
|
||||||
note:
|
|
||||||
|
note:
|
||||||
date:
|
date:
|
||||||
78
selenium.py
78
selenium.py
|
|
@ -1,40 +1,40 @@
|
||||||
from selenium import webdriver
|
from selenium import webdriver
|
||||||
from selenium.webdriver.chrome.service import Service
|
from selenium.webdriver.chrome.service import Service
|
||||||
from selenium.webdriver.common.by import By
|
from selenium.webdriver.common.by import By
|
||||||
from selenium.webdriver.common.keys import Keys
|
from selenium.webdriver.common.keys import Keys
|
||||||
import time
|
import time
|
||||||
|
|
||||||
# Chemin vers ChromeDriver
|
# Chemin vers ChromeDriver
|
||||||
CHROMEDRIVER_PATH = "./chromedriver" # Remplacez par le chemin correct
|
CHROMEDRIVER_PATH = "./chromedriver" # Remplacez par le chemin correct
|
||||||
|
|
||||||
# Options pour Chrome
|
# Options pour Chrome
|
||||||
options = webdriver.ChromeOptions()
|
options = webdriver.ChromeOptions()
|
||||||
options.add_argument("--headless") # Mode sans interface graphique
|
options.add_argument("--headless") # Mode sans interface graphique
|
||||||
options.add_argument("--disable-gpu")
|
options.add_argument("--disable-gpu")
|
||||||
options.add_argument("--window-size=1920,1080")
|
options.add_argument("--window-size=1920,1080")
|
||||||
|
|
||||||
# Initialisation du driver
|
# Initialisation du driver
|
||||||
service = Service(CHROMEDRIVER_PATH)
|
service = Service(CHROMEDRIVER_PATH)
|
||||||
driver = webdriver.Chrome(service=service, options=options)
|
driver = webdriver.Chrome(service=service, options=options)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Ouvrir la page
|
# Ouvrir la page
|
||||||
url = "https://www.consortiumdus.com/DUSS/Demande/Liste"
|
url = "https://www.consortiumdus.com/DUSS/Demande/Liste"
|
||||||
driver.get(url)
|
driver.get(url)
|
||||||
time.sleep(3) # Attendre le chargement
|
time.sleep(3) # Attendre le chargement
|
||||||
|
|
||||||
# Vérifier si une connexion est requise
|
# Vérifier si une connexion est requise
|
||||||
if "login" in driver.current_url.lower():
|
if "login" in driver.current_url.lower():
|
||||||
print("Page de connexion détectée. Ajoutez ici le code pour la connexion.")
|
print("Page de connexion détectée. Ajoutez ici le code pour la connexion.")
|
||||||
# Exemple : remplir un formulaire de connexion
|
# Exemple : remplir un formulaire de connexion
|
||||||
# username_input = driver.find_element(By.ID, "username")
|
# username_input = driver.find_element(By.ID, "username")
|
||||||
# password_input = driver.find_element(By.ID, "password")
|
# password_input = driver.find_element(By.ID, "password")
|
||||||
# username_input.send_keys("votre_identifiant")
|
# username_input.send_keys("votre_identifiant")
|
||||||
# password_input.send_keys("votre_mot_de_passe")
|
# password_input.send_keys("votre_mot_de_passe")
|
||||||
# password_input.send_keys(Keys.RETURN)
|
# password_input.send_keys(Keys.RETURN)
|
||||||
# time.sleep(3) # Attendre la redirection
|
# time.sleep(3) # Attendre la redirection
|
||||||
|
|
||||||
print("Navigation réussie !")
|
print("Navigation réussie !")
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
driver.quit()
|
driver.quit()
|
||||||
225
test.txt
225
test.txt
|
|
@ -1,102 +1,123 @@
|
||||||
poteau:PHD4-1 rue Church
|
PHO6 rue Mcbain
|
||||||
nom_poteau:
|
nom_poteau:
|
||||||
adresse:
|
adresse:
|
||||||
travaux:
|
travaux:
|
||||||
diametre:0.113
|
diametre:0.113
|
||||||
|
|
||||||
anomalie_1:
|
anomalie_1:
|
||||||
probleme_1:
|
probleme_1:
|
||||||
|
|
||||||
lclc:R8M4B
|
lclc:
|
||||||
code_barre:LS1DRS
|
code_barre:KN8ASK
|
||||||
classe:
|
classe:
|
||||||
longueur:86
|
longueur:2.11 feet
|
||||||
nbe_transfo:
|
nbe_transfo:
|
||||||
type_transfo:
|
type_transfo:
|
||||||
equip:Coupe-circuit
|
equip:Coupe-circuit
|
||||||
annee:2001
|
annee:1952
|
||||||
annee_inspection:2021
|
annee_inspection:2021
|
||||||
circonference:
|
circonference:
|
||||||
bois:
|
bois:
|
||||||
date:
|
|
||||||
releveur:
|
hauteur_top:7.59
|
||||||
|
hauteur_mt1:7.89
|
||||||
hauteur_top:9.96
|
hauteur_mt2:
|
||||||
hauteur_mt1:tri
|
hauteur_mt3:
|
||||||
hauteur_mt2:
|
hauteur_transfo:
|
||||||
hauteur_mt3:9.27
|
hauteur_bt1:5.77
|
||||||
hauteur_transfo:
|
hauteur_bt2:6.20
|
||||||
hauteur_bt1:6.57
|
hauteur_bt3:
|
||||||
hauteur_bt2:6.67
|
hauteur_lampadaire:5.25
|
||||||
hauteur_lampadaire:6.07
|
hauteur_toron1:4.16
|
||||||
hauteur_toron1:4.27
|
hauteur_toron2:
|
||||||
hauteur_toron2:4.07
|
hauteur_toron3:
|
||||||
hauteur_toron3:3.87
|
hauteur_toron4:
|
||||||
hauteur_toron4:4.07
|
|
||||||
|
conducteur_mt1: 2/0 ACSR
|
||||||
conducteur_mt1:477 MCM
|
phase_mt1:monophasé
|
||||||
phase_mt1:triphasé
|
dero_mt1:
|
||||||
dero_mt1:
|
|
||||||
|
conducteur_mt2:
|
||||||
conducteur_mt2:477 MCM
|
phase_mt2:
|
||||||
phase_mt2:Triphasé
|
deri_mt2:
|
||||||
deri_mt2:
|
|
||||||
|
conducteur_bt1:TX 4/0o
|
||||||
conducteur_mt3:2/0 ACSR
|
visee_bt1:Non
|
||||||
phase_mt3:Triphasé
|
deri_bt1:
|
||||||
deri_mt3:
|
|
||||||
|
conducteur_bt2:
|
||||||
conducteur_bt1:TX 4/0
|
visee_bt2:
|
||||||
visee_bt1:Non
|
deri_bt2:
|
||||||
deri_bt1:
|
|
||||||
|
proprio_toron1:Bell
|
||||||
conducteur_bt2:2/0 Acsr
|
type_toron1:6M
|
||||||
visee_bt2:Non
|
nbe_de_cable_toron1:3
|
||||||
deri_bt2:
|
diametre_toron1:22mm
|
||||||
|
deg_sol_toron1:3.98
|
||||||
proprio_toron1:Bell
|
croisement_toron1:Non
|
||||||
type_toron1:10M
|
ancre_toron1:
|
||||||
nbe_de_câble_toron1:3
|
|
||||||
diametre_toron1:35mm
|
note:x orange
|
||||||
deg_sol_toron1:
|
date:
|
||||||
croisement_toron1:
|
|
||||||
ancre_toron1:
|
PHO6 rue Mcbain
|
||||||
|
nom_poteau:
|
||||||
proprio_toron2:Bell
|
adresse:
|
||||||
type_toron2:10M
|
travaux:
|
||||||
nbe_de_câble_toron2:3
|
diametre:0.113
|
||||||
diametre_toron2:30mm
|
|
||||||
deg_sol_toron2:
|
anomalie_1:
|
||||||
croisement_toron2:
|
probleme_1:
|
||||||
ancre_toron2:
|
|
||||||
|
lclc:
|
||||||
proprio_toron3:Bell
|
code_barre:KN8ASK
|
||||||
type_toron3:10M
|
classe:
|
||||||
nbe_de_câble_toron3:3
|
longueur:2.11 feet
|
||||||
diametre_toron3:20mm
|
nbe_transfo:
|
||||||
deg_sol_toron3:2.72
|
type_transfo:
|
||||||
croisement_toron3:
|
equip:Coupe-circuit
|
||||||
ancre_toron3:
|
annee:1952
|
||||||
|
annee_inspection:2021
|
||||||
proprio_toron4:Bell
|
circonference:
|
||||||
type_toron4:6M
|
bois:
|
||||||
nbe_de_câble_toron4:1
|
|
||||||
diametre_toron4:15mm
|
hauteur_top:7.59
|
||||||
deg_sol_toron4:3.50
|
hauteur_mt1:7.89
|
||||||
croisement_toron4:
|
hauteur_mt2:
|
||||||
ancre_toron4:1
|
hauteur_mt3:
|
||||||
|
hauteur_transfo:
|
||||||
note:degagement non ok toron attacj
|
hauteur_bt1:5.77
|
||||||
Her
|
hauteur_bt2:6.20
|
||||||
|
hauteur_bt3:
|
||||||
tige_ancre1: 3/4
|
hauteur_lampadaire:5.25
|
||||||
cosse_ancre1:4
|
hauteur_toron1:4.16
|
||||||
type_ancre1:256p
|
hauteur_toron2:
|
||||||
ecart_ancre1:4.8
|
hauteur_toron3:
|
||||||
hauban1_ancre1:6M
|
hauteur_toron4:
|
||||||
hauban2_ancre1:3/16
|
|
||||||
hauban3_ancre1:5/16
|
conducteur_mt1: 2/0 ACSR
|
||||||
hauban4_ancre1:5/16
|
phase_mt1:monophasé
|
||||||
etat_ancre1:OK
|
dero_mt1:
|
||||||
espace_dispo_ancre1:Non
|
|
||||||
---
|
conducteur_mt2:
|
||||||
|
phase_mt2:
|
||||||
|
deri_mt2:
|
||||||
|
|
||||||
|
conducteur_bt1:TX 4/0o
|
||||||
|
visee_bt1:Non
|
||||||
|
deri_bt1:
|
||||||
|
|
||||||
|
conducteur_bt2:
|
||||||
|
visee_bt2:
|
||||||
|
deri_bt2:
|
||||||
|
|
||||||
|
proprio_toron1:Bell
|
||||||
|
type_toron1:6M
|
||||||
|
nbe_de_cable_toron1:3
|
||||||
|
diametre_toron1:22mm
|
||||||
|
deg_sol_toron1:3.98
|
||||||
|
croisement_toron1:Non
|
||||||
|
ancre_toron1:
|
||||||
|
|
||||||
|
note:x orange
|
||||||
|
date:
|
||||||
|
|
|
||||||
190
uds.js
190
uds.js
|
|
@ -1,95 +1,95 @@
|
||||||
|
|
||||||
const statusEl = document.getElementById("status");
|
const statusEl = document.getElementById("status");
|
||||||
const logEl = document.getElementById("log");
|
const logEl = document.getElementById("log");
|
||||||
const downloadsEl = document.getElementById("downloads");
|
const downloadsEl = document.getElementById("downloads");
|
||||||
const runBtn = document.getElementById("runBtn");
|
const runBtn = document.getElementById("runBtn");
|
||||||
|
|
||||||
let pyodide = null;
|
let pyodide = null;
|
||||||
async function initPyodide() {
|
async function initPyodide() {
|
||||||
statusEl.textContent = "Chargement de Pyodide ... (cela peut prendre 10-20s la première fois)";
|
statusEl.textContent = "Chargement de Pyodide ... (cela peut prendre 10-20s la première fois)";
|
||||||
pyodide = await loadPyodide();
|
pyodide = await loadPyodide();
|
||||||
statusEl.textContent = "Pyodide chargé. Installation de dépendances (openpyxl)...";
|
statusEl.textContent = "Pyodide chargé. Installation de dépendances (openpyxl)...";
|
||||||
|
|
||||||
await pyodide.loadPackage("micropip");
|
await pyodide.loadPackage("micropip");
|
||||||
const micropip = pyodide.pyimport("micropip");
|
const micropip = pyodide.pyimport("micropip");
|
||||||
await micropip.install("openpyxl");
|
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.
|
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
|
// load Pyodide script tag dynamically
|
||||||
(async () => {
|
(async () => {
|
||||||
const s = document.createElement("script");
|
const s = document.createElement("script");
|
||||||
s.src = "https://cdn.jsdelivr.net/pyodide/v0.24.1/full/pyodide.js";
|
s.src = "https://cdn.jsdelivr.net/pyodide/v0.24.1/full/pyodide.js";
|
||||||
s.onload = async () => { await initPyodide(); };
|
s.onload = async () => { await initPyodide(); };
|
||||||
document.head.appendChild(s);
|
document.head.appendChild(s);
|
||||||
})();
|
})();
|
||||||
|
|
||||||
function log(msg) {
|
function log(msg) {
|
||||||
logEl.textContent += msg + "\n";
|
logEl.textContent += msg + "\n";
|
||||||
logEl.scrollTop = logEl.scrollHeight;
|
logEl.scrollTop = logEl.scrollHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
function createDownloadLink(filename, bytes) {
|
function createDownloadLink(filename, bytes) {
|
||||||
// bytes is Uint8Array or ArrayBuffer-like
|
// bytes is Uint8Array or ArrayBuffer-like
|
||||||
const blob = new Blob([bytes], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
|
const blob = new Blob([bytes], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
|
||||||
const url = URL.createObjectURL(blob);
|
const url = URL.createObjectURL(blob);
|
||||||
const a = document.createElement("a");
|
const a = document.createElement("a");
|
||||||
a.href = url;
|
a.href = url;
|
||||||
a.download = filename;
|
a.download = filename;
|
||||||
a.textContent = `Download ${filename}`;
|
a.textContent = `Download ${filename}`;
|
||||||
downloadsEl.appendChild(a);
|
downloadsEl.appendChild(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
runBtn.addEventListener("click", async () => {
|
runBtn.addEventListener("click", async () => {
|
||||||
downloadsEl.innerHTML = "";
|
downloadsEl.innerHTML = "";
|
||||||
logEl.textContent = "";
|
logEl.textContent = "";
|
||||||
if (!pyodide) { alert("Pyodide n'est pas encore prêt."); return; }
|
if (!pyodide) { alert("Pyodide n'est pas encore prêt."); return; }
|
||||||
|
|
||||||
const templateFile = document.getElementById("template_excel").files[0];
|
const templateFile = document.getElementById("template_excel").files[0];
|
||||||
const txtFile = document.getElementById("txt_input").files[0];
|
const txtFile = document.getElementById("txt_input").files[0];
|
||||||
const typeDoc = document.getElementById("typedoc").value;
|
const typeDoc = document.getElementById("typedoc").value;
|
||||||
const nom_releveur = document.getElementById("nom_releveur").value || "";
|
const nom_releveur = document.getElementById("nom_releveur").value || "";
|
||||||
const hauteur_bosch = document.getElementById("hauteur_bosch").value || "0";
|
const hauteur_bosch = document.getElementById("hauteur_bosch").value || "0";
|
||||||
|
|
||||||
if (!templateFile) { alert("Veuillez uploader le template Excel."); return; }
|
if (!templateFile) { alert("Veuillez uploader le template Excel."); return; }
|
||||||
if (!txtFile) { alert("Veuillez uploader le fichier texte."); return; }
|
if (!txtFile) { alert("Veuillez uploader le fichier texte."); return; }
|
||||||
|
|
||||||
statusEl.textContent = "Lecture des fichiers (navigateur)...";
|
statusEl.textContent = "Lecture des fichiers (navigateur)...";
|
||||||
// read files on JS side
|
// read files on JS side
|
||||||
const [tmplBuf, txtStr] = await Promise.all([
|
const [tmplBuf, txtStr] = await Promise.all([
|
||||||
templateFile.arrayBuffer(),
|
templateFile.arrayBuffer(),
|
||||||
txtFile.text()
|
txtFile.text()
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// pass into pyodide globals:
|
// pass into pyodide globals:
|
||||||
// set template bytes as a Uint8Array in globals so Python can get bytes via to_py()
|
// 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("template_uint8", new Uint8Array(tmplBuf));
|
||||||
pyodide.globals.set("txt_content", txtStr);
|
pyodide.globals.set("txt_content", txtStr);
|
||||||
pyodide.globals.set("typeDoc", typeDoc);
|
pyodide.globals.set("typeDoc", typeDoc);
|
||||||
pyodide.globals.set("nom_du_releveur", nom_releveur);
|
pyodide.globals.set("nom_du_releveur", nom_releveur);
|
||||||
pyodide.globals.set("hauteur_bosch", hauteur_bosch);
|
pyodide.globals.set("hauteur_bosch", hauteur_bosch);
|
||||||
|
|
||||||
statusEl.textContent = "Exécution du script Python (Pyodide)...";
|
statusEl.textContent = "Exécution du script Python (Pyodide)...";
|
||||||
log("Lancement du traitement...");
|
log("Lancement du traitement...");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
const response = await fetch('UDS - Copie.py');
|
const response = await fetch('UDS - Copie.py');
|
||||||
const python_core_code = await response.text();
|
const python_core_code = await response.text();
|
||||||
await pyodide.runPythonAsync(python_core_code);
|
await pyodide.runPythonAsync(python_core_code);
|
||||||
statusEl.textContent = "Terminé — fichiers générés.";
|
statusEl.textContent = "Terminé — fichiers générés.";
|
||||||
log("Terminé.");
|
log("Terminé.");
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
statusEl.textContent = "Erreur pendant l'exécution (voir log).";
|
statusEl.textContent = "Erreur pendant l'exécution (voir log).";
|
||||||
log("ERREUR: " + err);
|
log("ERREUR: " + err);
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
try {
|
||||||
pyodide.globals.delete("template_uint8");
|
pyodide.globals.delete("template_uint8");
|
||||||
pyodide.globals.delete("txt_content");
|
pyodide.globals.delete("txt_content");
|
||||||
pyodide.globals.delete("typeDoc");
|
pyodide.globals.delete("typeDoc");
|
||||||
pyodide.globals.delete("nom_du_releveur");
|
pyodide.globals.delete("nom_du_releveur");
|
||||||
pyodide.globals.delete("hauteur_bosch");
|
pyodide.globals.delete("hauteur_bosch");
|
||||||
} catch(e) {}
|
} catch(e) {}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -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
|
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
|
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
|
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
|
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
|
à 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.
|
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
|
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
|
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
|
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.
|
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
|
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.
|
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
|
✅ 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"),
|
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 :
|
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).
|
Lire un PDF page par page (ou fichier par fichier).
|
||||||
|
|
||||||
Identifier automatiquement si c’est un modèle RSA ou UDS.
|
Identifier automatiquement si c’est un modèle RSA ou UDS.
|
||||||
|
|
||||||
Extraire des champs (ex : "Nom du poteau", "Adresse", etc.) avec leurs valeurs.
|
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.
|
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".
|
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
|
🧩 Étapes proposées
|
||||||
Étape 1 : Lecture du PDF
|
Étape 1 : Lecture du PDF
|
||||||
Utiliser PyMuPDF (alias fitz) ou pdfplumber pour lire le contenu texte ligne par ligne.
|
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.
|
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".
|
Récupérer les lignes avec des mots-clés connus : par ex. "Nom du poteau: PBD351 rue Roy".
|
||||||
|
|
||||||
Flexibilité et extensions possibles
|
Flexibilité et extensions possibles
|
||||||
✅ Tu peux détecter les cellules vides avec if ws[cellule].value is None:
|
✅ 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)
|
✅ 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
|
✅ 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
|
✅ Tu peux entrer le nombre de fichiers à traiter, ou le nombre de pages à lire
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user