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
Merci pour vos conseils/lumières
Linux debDesk Linux 4.19.0-9-amd64