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)"