Aller au contenu

Un calcul Excel exposé sans coder

Si votre calcul est déjà dans une feuille Excel — formules, références de cellules, table de paramètres — vous n’avez pas besoin de le réécrire en Python pour le publier sur MecaPy. Une fonction générique, xlsx_solver, fait tourner votre feuille côté serveur. Un workflow l’enrobe et expose les ports que vous décidez. Le résultat se lance comme n’importe quelle autre fonction du catalogue.

xlsx_solver est une « boîte noire » paramétrable :

  • elle prend en entrée un classeur .xlsx, un dictionnaire de valeurs, et deux tables de correspondance : input_map (« quelle variable va dans quelle cellule ? ») et output_map (« quelle cellule donne quelle sortie ? ») ;
  • elle évalue les formules de la feuille (en pur Python, sans LibreOffice) ;
  • elle renvoie un dictionnaire results lu depuis les cellules désignées par output_map.

Le workflow qui l’enrobe vous laisse définir vos propres ports d’entrée typés — Length, Force, File, … — et de les router vers xlsx_solver via les deux tables. À l’arrivée, votre workflow se comporte comme une fonction normale.

┌──────────────────────────────────────┐
│ xlsx_solver │
template │ inputs template │
(File .xlsx) ─┼─► │
│ inputs │
diameter │ ┌── inputs (Object) ──┐ │
(Length) ────┼──► │ { F: 1200, │ │
force │ │ d: 0.012 } │ │
(Force) ────┼──► └──────────────────────┘ │
│ │
│ input_map (Object, constante) │
│ { "F": "Calc!B2", │
│ "d": "Calc!B3" } │
│ │
│ output_map (Object, constante) │
│ { "sigma": "Calc!E10" } │
│ │
│ outputs ► results ── { sigma: … } ──┼─► sigma_eq (Stress)
└──────────────────────────────────────┘

Les nœuds d’entrée sur la gauche (template, diameter, force) sont vos paramètres — c’est ce que verra l’utilisateur du workflow dans son formulaire. Les constantes input_map / output_map sont fixées une fois pour toutes dans le workflow : elles décrivent votre feuille, et pas celle de l’utilisateur final.

  1. Préparez la feuille. Choisissez des cellules dédiées aux entrées (par exemple Calc!B2 pour le diamètre) et aux sorties (Calc!E10 pour la contrainte). Les formules entre les deux restent ce qu’elles sont — xlsx_solver les évalue telles quelles.

  2. Créez un workflow depuis l’interface.

  3. Ajoutez un nœud core/xlsx_solver (la fonction est fournie par le package core du catalogue).

  4. Câblez template et inputs vers les nœuds d’entrée que vous voulez exposer à l’utilisateur. Pour inputs, utilisez un nœud « construire un Object » qui regroupe vos variables sous les noms que vous attendez côté tableau.

  5. Renseignez input_map et output_map en valeurs constantes dans le workflow (la table de correspondance pointe sur votre feuille, vous la connaissez).

  6. Exposez les sorties de results sur les ports de sortie du workflow, typés comme vous le voulez (un Stress, un Force, …).

  7. Sauvegardez le workflow et lancez-le : votre utilisateur ne voit plus que les paramètres que vous avez choisis.

xlsx_solver est volontairement strict — il refuse les classeurs qui contiennent des fonctions volatiles (NOW, RAND, OFFSET, …) pour garantir des résultats reproductibles d’un run à l’autre. Si votre feuille dépend de l’heure courante ou tire des nombres aléatoires, il faudra l’adapter (ou écrire un vrai package).

  • Workflows — la documentation complète sur la composition de fonctions.
  • Déployer un package — quand vous serez prêt à publier votre propre fonction, sans passer par Excel.