Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 14-01-2016 15:53:09

cemoi
Membre
Distrib. : Debian 3.2.63-2+deb7u2 i686
Noyau : Linux 3.2.0-4-686-pae
(G)UI : XFCE
Inscription : 21-10-2008

Passage de macro en Ooobasic à Python

Hello,
j'ai de plus besoin de faire de petits programmes pour des taches d'automatisation pour du traitement de fichiers (souvent). Le plus gros morceau porte en général sur des formats *.od* et je suis obligé de les manipuler avec libreoffice. awk grep sed anco ne peuvent pas opérer sur ce type de fichiers car c'est en réalité une archive... L'ans dernier j'avais eu besoin de générer des cours en "cours élèves" en gros ça remplace une partie du texte par des .................. histoire de faire (essayer?...) retenir le plus important. J'étais parti sur du Ooobasic car c'est ce qui est natif à libo et que j'ai 0 notions de programmation (non ce n'est pas mon métier :] ). L'idée étant d'apprendre surtout à connaitre l'API de Libo (qui est un uzine).
Ma macro tourne à peu prés mais ça ne me va pas il  y a encore du travail... même si c'est déja pas mal.

Voici la macro:

    REM  *****  BASIC  *****
    Sub Main
 
       repBase="/home/cemoi/tests/SFTP/Travail_en_service/Programme_bac_TMA/03_Terminale/" 'chemin à adapter
 
       ' boucle sur les repertoires et sous repertoires et traitement des fichiers
       call boucleRepertoire(convertToUrl(repBase))
 
        msgBox "Fin du traitement"
 
    End Sub
 
        sub boucleRepertoire(sUrl)
    Dim oSFA As Object, oDateFile As Object
    Dim Mois As Long, DateJours As Long, Heure As Long
    Dim sNom As String
    Dim ListeFichiers As Variant
    oSFA = createUnoService("com.sun.star.ucb.SimpleFileAccess")
    ListeFichiers = oSFA.getFolderContents(sUrl, True)
    Mois = Month(Now)'on recupére la date du jour (mois jour heure)
    DateJours = Day(Now)
    Heure = Hour(Now)
       for each sNom in ListeFichiers
          if oSFA.IsFolder(sNom) then
             call boucleRepertoire(sNom) ' appel recursif
          else
             if endWith(sNom,".odt") and (not endWith(sNom,"_eleve.odt")) and instr(sNom,"cours") > 0 then
                 oDateFile = oSFA.getDateTimeModified(convertToURL(sUrl))
                         'if oDateFile.day = DateJours And oDateFile.Month = Mois and oDateFile.hours < 1 Then 'on definit ds quelle condition de temps les fichiers doivent etre traité
                            call traiteFichier(sNom) ' on traite ce fichier
                     End if
                End if
             'End if
       next sNom
    end sub
 
    function endWith(chaine, cherche)
 
       endWith = ( right(chaine, len(cherche)) = cherche)
 
    end function
 
    sub traiteFichier(urlFichier)
 
       ' ouverture
       doc = starDesktop.loadComponentFromUrl(urlFichier,"_blank",0, array())
 
       ' traitement des styles
       call RemplacerStylePartout2(doc)
 
       ' nom de fichier de sortie
       spliter = split(doc.url, ".") ' decoupe la chaine avec les points
       nb = ubound(spliter)
       spliter(nb-1) = spliter(nb-1)+"_eleve"
 
       spliter(nb)="pdf"
       newUrlPdf = join(spliter,".")
 
       spliter(nb)="odt"
       newUrlOdt = join(spliter,".")  
 
       'enregistrement nouveau odt
       doc.storeAsUrl(newUrlOdt, array()) ' aucune option, array vide
 
       ' options de l'export pdf
       dim propsFiltre(0 to 0) as new com.sun.star.beans.PropertyValue
       propsFiltre(0).name = "IsSkipEmptyPages"
       propsFiltre(0).value = False  
 
       dim prop(0 to 1) as new com.sun.star.beans.PropertyValue
       prop(0).name="FilterName"
       prop(0).value = "writer_pdf_Export"
       prop(1).name="FilterData"
       prop(1).value = propsFiltre()
 
       ' export pdf
       doc.storeToUrl(newUrlPdf, prop() )
 
       ' on ferme le fichier initial sans modification
       doc.close(false)
 
    end sub
 
    Sub RemplacerStylePartout2(MonDocument)
 
       Dim JeCherche As Object
 
       JeCherche = MonDocument.createReplaceDescriptor
 
       with JeCherche
         .SearchString  = "Texte eleve visible"
         .ReplaceString = "Texte eleve invisible"
         .SearchStyles = true
       end with
 
       MonDocument.replaceAll(JeCherche)
 
    End Sub



Elle parcoure une arbo pour ne traiter que certains fichiers: que les *.odt contenant le "mot" elev dans son nom apres ça elle remplace le style "Texte eleve visible" par le style "Texte eleve invisible" une fois terminé elle fait un enregistré sous en .odt en y ajoutant le suffixe _eleve au nom d'origine puis elle fait également un export en .pdf en y ajoutant également le suffixe _eleve en fin elle ferme le fichier et elle passe au suivant...
Normalement elle devrait aussi ne traiter que certains fichiers en comparant la date et l'heure des fichiers et du lancement de la macro pour ne traiter par exemple que les fichiers qui ont étaient modifié les 8 dernière heures par rapport à la date/heure du lancement de la macro... j'ai un problème de syntaxe mais j'y travaille.


Le suffixe c'est pour pouvoir traiter l'arbo apres coup avec un coup de rsync pour créer une arboressence eleve avec leur cours/exo/ressources, pour le moment je le fais avec un:
rsync -a --stats --progress --delete --include '*/' --include '*ele*.pdf' --exclude '*' --prune-empty-dirs /path/  /target/
Ca contruit toute l'arbo eleve du moins ici pour les cours


Pour le moment je voudrai passer ma macro Ooobasic en python car pour le moment libo s'ouvre et traite les fichiers un à un ce qui est tres loin d'être optimal... ça charge bien la machine pour le moment je traite 2000 fichiers à la louche. La seconde raison c'est que je voudrai arrivé à faire tourner tout ça en cli via un cron et là je me suis aperçu que encore une fois le Ooobasic n'est pas fait pour ça du tout.

Es que c'est une bonne idée de partir sur du python 3?
Quel IDE utiliser?...(non pas Emacs pitié)
Quelle doc puis je utiliser sachant que je suis sur de la macro python pour libo et je trouve pas grand chose la dessus hmm

Merci pour vos conseils/lumières


Linux debDesk 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u1 (2015-12-14) x86_64 GNU/Linux
Linux debServHome 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u1 (2015-12-14) x86_64 GNU/Linux
Linux lotus 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u6 (2015-11-09) x86_64 GNU/Linux

Hors ligne

#2 15-01-2016 18:48:53

paskal
autobahn
Lieu : ailleurs
Inscription : 14-06-2011
Site Web

Re : Passage de macro en Ooobasic à Python


I'd love to change the world
But I don't know what to do
So I'll leave it up to you...

logo-sur-fond.png

Hors ligne

Pied de page des forums