# -*- coding: iso-8859-1 -*- #. // WR_ReadTest1.py. #. // Exemple de lecture 1 d'un fichier Libre Office Writer. from _by_alltrim import by_alltrim # // Enlève les espaces à droite et à gauche d'une chaîne. from _by_aNew1 import by_aNew1 # // Créer un tableau à 1 dimension avec une valeur par défaut. from _by_aNew2 import by_aNew2 # // Créer un tableau à 2 dimensions avec une valeur par défaut. from _by_aRead2 import by_aRead2 # // Lire un tableau à 2 dimensions. from _by_aWrite2 import by_aWrite2 # // Ecrire dans un tableau à 2 dimensions. from _by_datetimeC import by_datetimeC # // Datetime du jour en chaîne au format dd/mm/aaaa hh:mm:ss. from _by_ferase import by_ferase # // Détruire un fichier. from _by_msgbox import by_msgbox # // Boîte de dialogue avec options et valeur de retour. from _by_msgbox import MB_ICONERROR # // Une icône de signe d'arrêt rouge apparaît dans la boîte de message. from _by_msgbox import MB_ICONEXCLAMATION # // Une icône de point d'exclamation jaune apparaît dans la boîte de message. from _by_msgbox import MB_ICONQUESTION # // Une icône bleue de point d'interrogation apparaît dans la boîte de message. from _by_msgbox import MB_YESNO # // La boîte de message contient deux boutons-poussoirs : Oui et Non. from _by_msgbox import MB_NO # // Non. from _by_padr import by_padr # // Ajoute des espaces à droite d'une chaîne. from _by_replicate import by_replicate # // Répéter un nombre de fois une chaîne. from _by_ShellExecute import by_ShellExecute # // Effectue une opération sur un fichier spécifié. from _by_UrlToFile import by_UrlToFile # // Convertir un nom de fichier URL en Windows. from _by_version import by_version # // Renvoie la version de Python. from _by_WindowsVersion import by_WindowsVersion # // Renvoie la version de Windows. from _by_writeLine import by_writeLine # // Ecriture d'une ligne dans un fichier texte. from _lo_GetUrl import lo_GetUrl # // Sélectionne une URL à ouvrir avec Libre Office. from _lo_LibreOfficeNew import lo_LibreOfficeNew # // Ouvre Libre Office. from _lo_MakeProperty import lo_MakeProperty # // Créer une propriété Libre Office. from _lo_Version import lo_Version # // Retourne la version Libre Office. cFileOut = "_Result.txt" #. // Programme maître. def WR_ReadTest1(): oServiceManager = lo_LibreOfficeNew() if oServiceManager is None: return -1 #. endif lError = False #. // Détruit le fichier de sortie. by_ferase( cFileOut ) #. // Sélection d'un fichier Writer. cFileOdt = lo_GetUrl( oServiceManager, "Writer" ) if len( cFileOdt ) == 0: by_msgbox( "Pas de fichier sélectionné", "Erreur", MB_ICONERROR ) oServiceManager = None return -1 #. endif #. // Crée les paramètres d'ouverture. args1 = lo_MakeProperty( oServiceManager, "Hidden" , False ) args2 = lo_MakeProperty( oServiceManager, "ReadOnly" , True ) args3 = lo_MakeProperty( oServiceManager, "MacroExecutionMode", 0 ) #. // Ouverture de Libre Office sélectionné en lecture seulement avec désactivation des macros. oDesktop = oServiceManager.createInstance( "com.sun.star.frame.Desktop" ) oDoc = oDesktop.loadComponentFromURL( cFileOdt, "_blank", 0, [ args1, args2, args3 ] ) #. // Création du fichier de sortie. oFileOut = open( cFileOut, "w" ) by_writeLine( oFileOut, "ReadTest1 : exemple de lecture d'un fichier ouvert avec Libre Office Writer.\n" ) by_writeLine( oFileOut, "J'utilise des modules avec des noms ressemblant à Clipper et suivants." ) by_writeLine( oFileOut, "Habitué à dBase, Harbour et VBScript, je mets des commentaires de fin de boucles ou de conditions." ) by_writeLine( oFileOut, "Ce programme est un exemple de base pour lire un fichier : il est évidement plus simple de faire un copier/coller!\n" ) by_writeLine( oFileOut, "Erreur(s) apparue(s) dans mes essais." ) by_writeLine( oFileOut, "Pour trouver les erreurs, rechercher la balise ***Error dans ce fichier." ) by_writeLine( oFileOut, " Ecriture d'une ligne contenant une puce d'un fichier MS Word." ) by_writeLine( oFileOut, "" ) by_writeLine( oFileOut, "Informations diverses.\n" ) by_writeLine( oFileOut, "Nom du fichier : " + by_UrlToFile( cFileOdt ) ) by_writeLine( oFileOut, "URL du fichier : " + cFileOdt ) if oDoc.isReadOnly(): cLine = "Oui." else: cLine = "Non." #. endif by_writeLine( oFileOut, "Lecture seule : " + cLine ) by_writeLine( oFileOut, "Version Python : " + by_version( True ) ) by_writeLine( oFileOut, "Version L.O. : " + lo_Version( oServiceManager ) ) by_writeLine( oFileOut, "Version Windows : " + by_WindowsVersion() ) by_writeLine( oFileOut, "Date et heure : " + by_datetimeC() ) by_writeLine( oFileOut, "" ) by_writeLine( oFileOut, by_replicate( "-", 80 ) ) by_writeLine( oFileOut, "" ) #. // Prise de l'objet texte du document ouvert. oText = oDoc.Text #. // Prise de la liste des objets du document ouvert. oParaEnum = oText.createEnumeration() while True: #. // Vérification si l'objet a encore des éléments à traiter. if not oParaEnum.hasMoreElements(): break #. endif oPara = oParaEnum.nextElement() #. // Si c'est un objet paragraphe de texte simple. if oPara.supportsService( "com.sun.star.text.Paragraph" ): #. // Prise des objets du paragraphe. oPortionEnum = oPara.createEnumeration() while True: #. // Vérification si l'objet a encore des éléments à traiter. if not oPortionEnum.hasMoreElements(): break #. endif #. // Prise de l'objet de la portion à récupérer. oPortion = oPortionEnum.nextElement() #. // Récupération du texte de la portion. #. // Erreurs avec les puces venant de MS Word, ok en dBase. cLine = oPortion.String cLine = by_alltrim( cLine ) cLine = cLine.replace( chr( 9 ), " " ) cLine = by_alltrim( cLine ) try: if len( cLine ) > 0: by_writeLine( oFileOut, cLine ) #. endif except Exception: by_writeLine( oFileOut, "***Error : écriture de la ligne." ) lError = True #. endtry #. enddo #. // Si c'est un objet tableau. elif oPara.supportsService( "com.sun.star.text.TextTable" ): nRows = oPara.getRows().getCount() #. // Ne fonctionne pas avec des cellules fusionnées. #. // nCols = oPara.getColumns().getCount() nCols = 0 for l in range( 0, nRows, 1 ): for c in range( 0, 1024, 1 ): #. // Erreur et sort de la boucle si plus de colonnes. try: oCell = oPara.getCellByPosition( c, l ) if c > nCols: nCols = c #. endif except Exception: break #. endtry #. endfor c #. endfor l nCols = nCols + 1 aTableau = by_aNew2( nRows, nCols, "" ) aLens = by_aNew1( nCols, 0 ) for l in range( 0, nRows, 1 ): for c in range( 0, nCols, 1 ): try: oCell = oPara.getCellByPosition( c, l ) except Exception: break #. endtry #. // Traitement de la cellule. oPortionEnum = oCell.createEnumeration() while True: #. // Vérification si l'objet a encore des éléments à traiter. if not oPortionEnum.hasMoreElements(): break #. endif #. // Prise de l'objet de la portion à récupérer. oPortion = oPortionEnum.nextElement() #. // Si c'est un objet paragraphe de texte simple. if oPortion.supportsService( "com.sun.star.text.Paragraph" ): by_aWrite2( aTableau, l + 1, c + 1, oPortion.String ) if len( oPortion.String ) > aLens[ c ]: aLens[ c ] = len( oPortion.String ) #. endif else: by_aWrite2( aTableau, l + 1, c + 1, "***Error type inconnu" ) lError = True if len( "***Error type inconnu" ) > aLens[ c ]: aLens[ c ] = len( "***Error type inconnu" ) #. endif #. endif #. enddo #. endfor c #. endfor l #. // Ecriture du des données du tableau. cTrait = "" for c in range( 0, nCols, 1 ): cTrait = cTrait + "|" + by_replicate( "-", aLens[ c ] ) #. endfor c cTrait = cTrait + "|" by_writeLine( oFileOut, cTrait ) for l in range( 0, nRows, 1 ): cLine = "|" for c in range( 0, nCols, 1 ): cLine = cLine + by_padr( by_aRead2( aTableau, l + 1, c + 1 ), aLens[ c ] ) + "|" #. endfor c by_writeLine( oFileOut, cLine ) #. endfor l by_writeLine( oFileOut, cTrait ) else: by_writeLine( oFileOut, "***Error : le paragraphe n'est ni texte, ni tableau." ) lError = True #. endif #. enddo oFileOut.close() oDoc.Close( True ) #. // Ferme Libre Office = démarrage plus long à la prochaine exécution. # oDesktop.Terminate() oServiceManager = None if lError: by_msgbox( "Erreur(s) trouvée(s) dans ce script.", "Erreur", MB_ICONEXCLAMATION ) else: by_msgbox( "Tansformation réalisée avec succès" ) #. endif by_ShellExecute( cFileOut ) return 0 WR_ReadTest1() ''' Dernière modification : 2022-02-26 '''