[Résolu][Calc]Transformation fichiers csv en fichiers ods

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 !

[Résolu][Calc]Transformation fichiers csv en fichiers ods

Messagepar Gaspar66 » 14 Jan 2019 19:22

Bonsoir,

j'essaye d'écrire un code qui me permette de transformer des fichiers csv en fichiers ods en leur donnant le nom du contenu d'une cellule précise des différents fichiers csv.
Ne pouvant pas joindre les fichiers csv, j'ai joint une copie du fichier csv en ods, l'idée c'est pour chaque fichier csv différent, d'aller chercher le contenu de la cellule B1 pour s'en servir pour renommer le fichier ods.

je suis parti du code du très bon bouquin Programmation OpenOffice de Laurent Godart et Bernard Marcelly en essayant de l'adapter, mais n'ayant que peu de connaissances en informatique, je bloque et je ne sais pas comment il faut que je m'y prenne. En gros, c'est Je boucle sur chaque fichier csv, lis le premier fichier, récupère le nom du fichier cellule B2, converti le fichier en ods en sauvegardant le fichier avec le nom (contenu cellule B2) et ainsi de suite.

Code : Tout sélectionner   AgrandirRéduire
rem Code07-06.odt bibli : Standard Module1
Option Explicit
Sub chargerCsvCommeCalc
Dim props1(1) As New com.sun.star.beans.PropertyValue
Dim props2()
Dim adrDocCSV As String, adrDocCalc As String
Dim docCalc As Object
adrDocCSV = ConvertToURL("C:\Docs OpenOffice\CSVexemple1.txt")
props1(0).Name = "FilterName"
props1(0).Value = "Text - txt - csv (StarCalc)"
props1(1).Name = "FilterOptions"
props1(1).Value = "9,34,ANSI,1,1/2/2/2/3/1/4/1"
docCalc = StarDesktop.loadComponentFromURL(adrDocCSV, "_blank", 0, props1())
adrDocCalc = ConvertToURL("C:\Docs OpenOffice\resultatCSV.ods")
docCalc.storeAsURL(adrDocCalc, props2() )
End Sub


Je remercie par avance tous ceux qui pourraient m'aider à progresser pour finaliser ce code.
Bien cordialement.
Pièces jointes
clients.ods
image du fichier csv
(12.97 Kio) Téléchargé 1 fois
Sans nom 2.odt
code loin d'être abouti
(10.1 Kio) Téléchargé 1 fois
Dernière édition par micmac le 19 Jan 2019 12:47, édité 3 fois.
Raison: Ajout de [Résolu]
LibreOffice 6.0.5 win x86.msi
Windows 8, 64 bits
Avatar de l’utilisateur
Gaspar66
Fraîchement OOthentifié
 
Message(s) : 7
Inscrit le : 08 Nov 2017 21:25
Localisation : 66

Re: [Calc]Transformation fichiers csv en fichiers ods

Messagepar Gaspar66 » 18 Jan 2019 21:35

Bonsoir,
j'ai essayé d'avancer sur mon code. A partir d'un fichier csv bien précis, j'ai réussi à créer un code qui me permet de transformer un fichier csv en fichier ods en donnant comme nom du fichier le contenu d'une cellule Mon module 2.
L'affaire se corse quand j'essaye de boucler sur plusieurs fichiers csv d'un même dossier, le fichier calc ne s'ouvre pas et le code s'arrête. Mon module 3: :fou:
Code : Tout sélectionner   AgrandirRéduire
Option Explicit
Sub chargerCsvCommeCalc
Dim props1(1) As New com.sun.star.beans.PropertyValue
Dim props2()
Dim adrDocCSV As String, adrDocCalc As String
Dim docCalc As Object
Dim unefeuille as Object, lesfeuilles as Object
Dim macellule as object
Dim nomFichier as String, adresseDoc as String, adresse
Dim Boucle as Long, Fichier as string

'adrDocCSV = ConvertToURL("C:\Users\jose\Documents\php\test\reférences\Ch07\csv\clients1.csv")
adrDoccsv = ConvertToUrl("C:\Users\jose\Documents\php\test\reférences\Ch07\csv\a")
     Fichier = dir( adrDoccsv & "/*.csv" )   
     
   For Boucle = 0 TO 1
   
    While( Len( Fichier ) > 0 )

props1(0).Name = "FilterName"
props1(0).Value = "Text - txt - csv (StarCalc)"
props1(1).Name = "FilterOptions"
props1(1).Value = "59,34,ANSI,1,1/1/2/2/3/2/4/2"
docCalc = StarDesktop.loadComponentFromURL(adrDoccsv, "_blank", 0, props1())
adrDocCalc = ConvertToURL("C:\Users\jose\Documents\php\test\reférences\Ch07\csv\a\resultatCSV.ods")

      lesfeuilles = docCalc.sheets
      unefeuille = lesfeuilles(0)
      
       macellule = unefeuille.getCellRangeByName("B1")
       nomfichier = macellule.string
      
   adresse = Split(docCalc.URL,"/")
   adresse(UBound(adresse())) = ""
   adresse = join(adresse, "/")
   adresse = ConvertToURL(adresse & nomfichier & ".odt")
   docCalc.storeToURL(adresse, Array())   
   docCalc.Close(True)
       Fichier = Dir                        'lit l'emplacement du fichier suivant
       Wend
   Next
   Msgbox("J'ai fini   ;-) ")

End Sub

Si quelqu'un a une idée, je suis preneur.
Merci d'avance.
Bonne soirée.
Pièces jointes
Sans nom 2.odt
(12.09 Kio) Aucun téléchargement
LibreOffice 6.0.5 win x86.msi
Windows 8, 64 bits
Avatar de l’utilisateur
Gaspar66
Fraîchement OOthentifié
 
Message(s) : 7
Inscrit le : 08 Nov 2017 21:25
Localisation : 66

Re: [Calc]Transformation fichiers csv en fichiers ods

Messagepar Dude » 18 Jan 2019 22:52

Salut,

Pourquoi ne pas te servir de UnoConv pour faire ce travail ?
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20403
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Calc]Transformation fichiers csv en fichiers ods

Messagepar Gaspar66 » 19 Jan 2019 11:29

Bonjour,
j'ai fait des recherches sur UnoConv et suis tombé sur le tuto à l'adresse h**ps://stuvel.eu/ooo-python.
m'intéressant que depuis peu à la programmation, je saisis pas complètement la procédure d'installation.
j'ai téléchargé OOolib.py. Il est précisé dans le tuto qu'il faut lancer OpenOffice.org comme ceci:

ooffice "-accept=socket,host=localhost,port=8100;urp;"
je présume que pour libreOffice c'est pareil.

Concrêtement, où est ce qu'il faut aller pour taper cette ligne de commande.

Ensuite il est indiqué que le module Python doit être placé dans un répertoire de développement et qu''il convient d'exécuter:

mkdir -p Danny/OOo
touch Danny/__init__.py
touch Danny/OOo/__init__.py
mv OOoLib.py Danny/OOo/

Pour moi c'est du chinois, où est ce qu'on trouve ce répertoire de développement.

En plus il faut se procurer le paquet Python -uno, où et comment on l'installe.

C'est peut être évidemment pour un connaisseur, mais pour un débutant comme moi, je ne vois pas trop comment on peut installer tout ça.

Après l'utilisation du code semble aisée.

Est ce que le code ne peut pas être modifié pour éviter cette installation qui semble assez lourde?

Merci d'avance pour les réponses.

Cordialement.
LibreOffice 6.0.5 win x86.msi
Windows 8, 64 bits
Avatar de l’utilisateur
Gaspar66
Fraîchement OOthentifié
 
Message(s) : 7
Inscrit le : 08 Nov 2017 21:25
Localisation : 66

Re: [Calc]Transformation fichiers csv en fichiers ods

Messagepar Gaspar66 » 19 Jan 2019 12:03


La modération a écrit:Merci de ne pas poster plusieurs messages à la suite. Vous disposez d'un bouton Éditer en haut à droite de chaque message et d'un autre bouton ajout si vous désirez ajouter un complément lorsqu'il n'y a pas de réponse.

Eureka,
j'ai trouvé,
en modifiant mon code ainsi ça marche:
Code : Tout sélectionner   AgrandirRéduire
Option Explicit
Sub chargerCsvCommeCalc
Dim props1(1) As New com.sun.star.beans.PropertyValue
Dim props2()
Dim adrDocCSV As String, adrDocCalc As String, file as string
Dim docCalc As Object
Dim unefeuille as Object, lesfeuilles as Object
Dim macellule as object
Dim nomFichier as String, adresseDoc as String, adresse
Dim Boucle as Long, Fichier as string

'adrDocCSV = ConvertToURL("C:\Users\jose\Documents\php\test\reférences\Ch07\csv\clients1.csv")
adrDoccsv = ConvertToUrl("C:\Users\jose\Documents\php\test\reférences\Ch07\csv\a")
     Fichier = dir( adrDoccsv & "/*.csv" )   
'xray Fichier    
   For Boucle = 0 TO 1
   
    While( Len( Fichier ) > 0 )
   
File = adrDoccsv()&"/"&fichier
'xray file
props1(0).Name = "FilterName"
props1(0).Value = "Text - txt - csv (StarCalc)"
props1(1).Name = "FilterOptions"
props1(1).Value = "59,34,ANSI,1,1/1/2/2/3/2/4/2"
docCalc = StarDesktop.loadComponentFromURL(File, "_blank", 0, props1())
'xray docCalc
adrDocCalc = ConvertToURL("C:\Users\jose\Documents\php\test\reférences\Ch07\csv\a\resultatCSV.ods")

      lesfeuilles = docCalc.sheets
      unefeuille = lesfeuilles(0)
      
       macellule = unefeuille.getCellRangeByName("B1")
       nomfichier = macellule.string
      
   adresse = Split(docCalc.URL,"/")
   adresse(UBound(adresse())) = ""
   adresse = join(adresse, "/")
   adresse = ConvertToURL(adresse & nomfichier & ".odt")
   docCalc.storeToURL(adresse, Array())   
   docCalc.Close(True)
       Fichier = Dir                        'lit l'emplacement du fichier suivant
       Wend
   Next
   Msgbox("J'ai fini   ;-) ")

End Sub


comme quoi en se creusant le cerveau, on peut arriver à régler un problème.
Merci quand même pour la réponse de Dude, qui m'a fait redoublé d'efforts pour trouver une autre solution.

Bonne journée. :D
LibreOffice 6.0.5 win x86.msi
Windows 8, 64 bits
Avatar de l’utilisateur
Gaspar66
Fraîchement OOthentifié
 
Message(s) : 7
Inscrit le : 08 Nov 2017 21:25
Localisation : 66


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : OOotremer971 et 8 invité(s)