Problème de connection de Python3 et Libreoffice

Bonsoir,
Après avoir créer un script Python pour creer un fichier .csv, j’ ai démarré un programme pour me connecter à Libreoffice Base afin de mettre à jour certains champs d’ une table.
Le script en cours d’ élaboration:

#!/usr/bin/env python

import uno
import csv

def connectionDb():
    local_context = uno.getComponentContext()
    resolver = local_context.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", local_context)
    ctx = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
    return ctx

nomTable = 'T_Ttr'
baseBourse = 'file:///mnt/El_Casot/Yvon/Finance/Bourse/BDD/Archive/Bourse-2312.odb'

def importDonnees(ctx, nomTable, fichierCsv):
    db_context = ctx.ServiceManager.createInstanceWithContext("com.sun.star.sdb.DatabaseContext", ctx)
    db = db_context.getByName(baseBourse)
    connection = db.getConnection("", "")
    statement = connection.createStatement()
    
    with open(fichierCsv, mode='r') as file:
        reader = csv.DictReader(file)
        for row in reader:
            sql = f"UPDATE {nomTable} SET Cf_Ttr = '{row['CfTitre']}', DtObjectif = '{row['rsltDateConsensus']}' WHERE CfTitre = '{row['CfTitre']}'"
            statement.executeUpdate(sql)
    
    connection.close()  # Fermer la connexion après l'utilisation

g_exportedScripts = (connectionDb(),)

Ce script se lance depuis un bouton d’ un formulaire. En retour, j’ obtiens le message suivant:

Une erreur de structure de script s' est produite lors de l' execution du script vnd.sun.stat.script:tstimportCsv.py connectionDb?langage=Ppython&location=user en Python.
Message : <class'ooo_script_framework.com.sun.star.connection.NoConnectException>:connector:couldn't connect to socket (Connection refus hse) at /home/buildslave/source/libo-core/io/source/connector/connector.cxx;118
File"/opt/libreoffice24.8/program/pythonscript.py",line 1055, in getScript mod = self.provCtx.getModuleByUrl(fileUri)
File"/opt/libreoffice24.8/program/pythonscript.py",line 492, in getModuleByUrlexec(code, entry.module.__dict__)
File "/home/elfouster/.config/libreoffice/4/user/Scripts/python/tstimportCsv.py", line 29, in "module"
g_exportedScripts = (connectionDb(),)
File "/home/elfouster/.config/libreoffice/4/user/Scripts/python/tstimportCsv.py", line 9, in connectionDb
ctx = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
Le port 2002 serait-il en cause?

Cordialement

Si vous exécutez le programme depuis LibreOffice, vous n’avez pas besoin de faire la connexion “à distance”.

il faut lancer soffice --accept ...

docx - Unable to connect the LibreOffice on port 2002? - Stack Overflow

Bonjour à vous,
Tout d’ abord, merci de l’ intérêt que vous portez à ma question. Malgré tout, deux remarques:
Pour ce qui concerne la connection, d’ accord pour convenir qu’ elle n’ est pas utile. Toutefois, j’ ai une erreur dans mon programme car, dans le cas contraire, il n’ y aurait pas de bug?
D’ autre part, j’ ai suivi votre lien, et d’ après ce que j’ en comprends, il faut installer une autre version de LO puis lancer soofice?
Cordialement

effectivement y a un truc bizarre avec ces 2 contextes…
il sort d’où ce programme ?

Bonjour,
J’ ai créer la première fonction depuis un petit moment et je l’ utilise quasiment journellement dans d’ autres srcipts. Jusqu’ a présent, elle ne m’ a jamais posée de soucis.
La deuxième, je l’ ai développé pour ce script particulier.
Cordialement

un exemple ?

Voici un des scripts:
`import uno

Initialisation de l’interface Uno

localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext(“com.sun.star.bridge.UnoUrlResolver”, localContext)
ctx = resolver.resolve(“uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext”)
smgr = ctx.ServiceManager

Obtention de l’objet Desktop

desktop = smgr.createInstanceWithContext(“com.sun.star.frame.Desktop”, ctx)

Ouverture de la base de données

database = desktop.loadComponentFromURL(“file:///mnt/El_Casot/Yvon/Informatique/LibreOffice/Base_Test.odb”, “_blank”, 0, ())

Masquage de la page d’accueil

database.CurrentController.Frame.ContainerWindow.setVisible(False)

#Ouvrir le formulaire Menu
database.openFormDocument(‘Mn_Gn’)
Resize(left = 50, top = 150, width = 500, height = 400)`

illisible :frowning:

apparemment pas de g_exportedScripts

Bonjour,
Il est normal que ne figure pas la ligne:

g_exportedScripts

Il n’ y a pas de fonction.
Revoici le code en plus visible:

import uno

# Initialisation de l'interface Uno
localContext = uno.getComponentContext()
resolver = localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", localContext)
ctx = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")
smgr = ctx.ServiceManager

# Obtention de l'objet Desktop
desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx)

# Ouverture de la base de données
database = desktop.loadComponentFromURL("file:///mnt/El_Casot/Yvon/Informatique/LibreOffice/Base_Test.odb", "_blank", 0, ())

# Masquage de la page d'accueil
database.CurrentController.Frame.ContainerWindow.setVisible(False)

#Ouvrir le formulaire Menu
database.openFormDocument('Mn_Gn')
Resize(left = 50, top = 150, width = 500, height = 400)

Cordialement

@ElCatala ,
Vous êtes là depuis 5 ans et vous ne savez toujours pas comment écrire des commentaires, c’est vraiment triste.

2024-09-14   12 50 08

Encore un commentaire qui fait avancer le shmilblic comme aurez dit Coluche