[Résolu][Python] Copier un script dans le document actif

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Avatar de l’utilisateur
ddorange
Membre hOOnoraire
Membre hOOnoraire
Messages : 121
Inscription : 23 déc. 2015 18:49
Localisation : Annecy

[Résolu][Python] Copier un script dans le document actif

Message par ddorange »

Bonjour à tous,

J'ai écrit un script python qui permet de copier un autre script dans le document actif.

Code : Tout sélectionner

import uno

def copyscripttodoc(py_file):
    from os import path  
    createUnoService = XSCRIPTCONTEXT.ctx.ServiceManager.createInstance
    sfa = createUnoService("com.sun.star.ucb.SimpleFileAccess")
    protocol = "vnd.sun.star.tdoc:/" 
    py_folder = "/Scripts/python/"
    p = path.basename(py_file)
    p_uri = py_file
    doc = XSCRIPTCONTEXT.getDocument()
    uid = doc.RuntimeUID
    if not sfa.exists(f"{protocol}{uid}{py_folder}"):
        sfa.createFolder(f"{protocol}{uid}{py_folder}")
    sfa.copy(p_uri, f"{protocol}{uid}{py_folder}{p}")
Cela fonctionne très bien sous LibreOffice. En exploitant les propriété du service "com.sun.star.ucb.SimpleFileAccess" on peut manipuler les scripts inclus dans un document (supprimer, extraire, etc ...).
Sous OpenOffice, il y a une erreur dès que sfa est appelé exemple sfa.exists(....). Peut-être que cela vient de f"{protocol}{uid}{py_folder}" qui n'est pas reconnu avec Python 2 de OpenOffice.

Pour tester, APSO doit être installé :
Dézippez
CopyToDoc.zip
Copiez CopyScript2Doc.py dans le sous dossier /Scripts/python du dossier utilisateur,
Copiez SYRACUSE.py dans le dossier Documents,
Lancez APSO, allez jusqu'à copyscripttodoc,
Lancez la console, tapez copyscripttodoc(....chemin vers SYRACUSE.py),
Vérifiez avec APSO que SYRACUSE.py figure bien dans le document actif.

Si vous avez des idées ...
Merci d'avance.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Oukcha le 28 févr. 2024 12:38, modifié 1 fois.
Raison : Ajout coche
LibreOffice 24.2 et OpenOffice 4.1.15 sous Ubuntu 23.10, Windows 7, Windows 10, MacOs Sonoma
Avatar de l’utilisateur
ddorange
Membre hOOnoraire
Membre hOOnoraire
Messages : 121
Inscription : 23 déc. 2015 18:49
Localisation : Annecy

Re: [Résolu][Python] Copier un script dans le document actif

Message par ddorange »

Le problème venait effectivement de la syntaxe qui n'est pas acceptée par Python 2.

Il suffit d'écrire :

Code : Tout sélectionner

import uno
def copyscripttodoc(py_file):
    from os import path
    createUnoService = XSCRIPTCONTEXT.ctx.ServiceManager.createInstance
    sfa = createUnoService("com.sun.star.ucb.SimpleFileAccess")
    protocol = "vnd.sun.star.tdoc:/" 
    py_folder = "/Scripts/python/"
    p = path.basename(py_file)
    doc = XSCRIPTCONTEXT.getDocument()
    uid = doc.RuntimeUID
    dest = protocol + uid + py_folder
    if not sfa.exists(dest):
        sfa.createFolder(dest)
    sfa.copy(py_file, dest + p)
Bien cordialement.
LibreOffice 24.2 et OpenOffice 4.1.15 sous Ubuntu 23.10, Windows 7, Windows 10, MacOs Sonoma