i |
Conversion CSV en ODS en ligne de commande |
j'ai à convertir des fichiers csv (texte délimité) en ods.
Pour ce faire j'ai pensé utiliser le mode --headless de soffice.exe avec
l'option --convert-to ods
La ligne de commande est :
soffice --headless --convert-to ods monfichier.csv
Cependant je rencontre une erreur d'interprétation des données du csv :
les nombres commençant par des zéros sont interprétés en nombres, donc
perdent ce-s zéro-s de tête. Si je mets ces colonnes en délimité (par
des "), j'obtiens le même résultat. C'est gênant, puisque les
départements dont le code débute par zéro sont mal transcodés.
Exemple : soient les données suivantes
?"Dept","Nom"
"01","Ain"
"09","Ariège"
"33","Gironde"
je n'arrive pas à obtenir un résultat cohérent (des codes avec leurs
zéros de tête lorsqu'il y en a).
8< -----------------------------------------------
'CSV_To_ODS
'macro d'importation de fichiers NRB au format CSV vers le format ODS
'à installer dans Mes Macros, bibliothèque CSVlib, module NRBimport
Option Explicit
Sub CSV_To_ODS(ByVal pCSVFileName, pODSFileName As String)
Dim l_PropsIn(1) As New com.sun.star.beans.PropertyValue
Dim l_PropsOut()
Dim l_CSVAdr As String'le nom du fichier converti en URL
Dim l_ODSAdr As String'le nom du fichier ODS cible, en URL
Dim oODSdoc As Object'le classeur à créer
Dim l_SepOpt As String
Dim l_CharSep As String
Dim l_CharType As String
Dim l_ColProps As String
Dim l_Line As String
'conversion des noms des fichiers
l_CSVAdr = ConvertToURL(Trim(pCSVFileName))
l_ODSAdr = ConvertToURL(Trim(pODSFileName))
'paramètres d'importation
l_PropsIn(0).Name = "FilterName"
l_PropsIn(0).Value = "Text - txt - csv (StarCalc)"
l_PropsIn(1).Name = "FilterOptions"
'colonnes :
L,Fichier,Page,Struct,Matricule,Nom,Prenom,ZL,CodeErreur,Libelle,ZoneLibre,Pole,Equipe
'numéro : 1 2 3 4 5 6 7 8 9
10 11 12 13
'type : 1 2 1 2 2 2 2 2 2
2 2 2 2
l_ColProps = "1/1/2/2/3/1/4/2/5/2/6/2/7/2/8/2/9/2/10/2/11/2/12/2/13/2"
l_SepOpt = "44" 'code ascii du séparateur de colonnes (virgule)
l_CharSep = "" 'code ascii du délimiteur de texte (aucun)
l_CharType = "22" 'jeu de caractères (ISO-8859-15/EURO)
l_Line = "1" 'ligne de départ de l'import
l_PropsIn(1).Value = l_SepOpt & "," & l_CharSep & "," & l_CharType & ","
& l_Line & "," & l_ColProps
'importation
oODSdoc = StarDesktop.loadComponentFromURL(l_CSVAdr, "_blank", 0,
l_PropsIn())
'enregistrement
oODSdoc.storeAsURL(l_ODSAdr, l_PropsOut())
oODSdoc.close(True)
End Sub 'CSV_To_ODS
----------------------------------------------- >8
La ligne de commande Windows shell pour appeler cette macro est :
"%programfiles%\libreoffice 4\program\soffice.exe" --headless
"macro:///CSVlib.NRBimport.CSV_To_ODS(F:\CSRH_DTE\CSV2ODS\NRBresult.csv,F:\CSRH_DTE\CSV2ODS\NRB_test.ods)"