Convertir csv en ods

Bonjour,

(Win7-64 -- LibO 4.1.4.2)

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

J'ai cherché sur le net mais sans succès.

Je connais un script Python qui va bien mais si je peux j'aimerais
autant utiliser les fonctionnalités natives de soffice.

Des idées ?

Merci,

Bonjour Jean-François

c Nifenecker wrote

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
...
je n'arrive pas à obtenir un résultat cohérent (des codes avec leurs
zéros de tête lorsqu'il y en a).

Il y a peut-être plus élégant mais tu peux au moins lancer en ligne de
commande
une macro faisant la conversion avec les "bons" paramètres de filtre.

Cordialement
Pierre-Yves

Bonjour Pierre-Yves,

Il y a peut-être plus élégant mais tu peux au moins lancer en ligne de
commande
une macro faisant la conversion avec les "bons" paramètres de filtre.

\o/ Mais c'est bien sûr !

Merci !

Bonjour,
Je crois qu'en ouvrant le CSV avec LOCalc on a l'option "champ entre guillemets comme texte" qui garde les zéros non significatifs.
Cordialement
Michel B.

J'ai écrit une macro (dans MesMacros) dont les deux principales lignes
sont :

'importation
oODSdoc = StarDesktop.loadComponentFromURL(l_CSVAdr, "_blank", 0,
l_Props1())

et

'enregistrement
oODSdoc.storeAsURL(l_ODSAdr, l_Props2())

je lance ma macro ainsi :
"%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)"

et le mode headless est inopérant : la fenêtre Calc s'affiche, les
données sont bien importées et sont bien enregistrées sous le bon
format. Mais la fenêtre reste à l'écran...

Je voudrais ne pas voir la fenêtre. Je fais quoi de mal ?

Bonjour,

Je crois qu'en ouvrant le CSV avec LOCalc on a l'option "champ entre
guillemets comme texte" qui garde les zéros non significatifs.

oui, mais je ne veux pas d'interférence avec l'utilisateur.
L'utilisateur est un script (VBS) qui doit s'exécuter de façon
automatisée. Donc toute utilisation ou affichage d'UI sont exclus.

En ajoutant oODSdoc.close(True)
ça va mieux :slight_smile:

Bonjour,

Je n'ai pas l'habitude de travailler en ligne de commande avec mes macros,
mais quand je ne veux pas voir les divers fichiers Calc ouverts, je le
demande ainsi:

l_Props1(0).Name = "Hidden"
l_Props1(0).Value = True

Je suppose que ça doit fonctionner pareil ...

Michel

Bonjour,

Je n'ai pas l'habitude de travailler en ligne de commande avec mes macros,
mais quand je ne veux pas voir les divers fichiers Calc ouverts, je le
demande ainsi:

l_Props1(0).Name = "Hidden"
l_Props1(0).Value = True

Je suppose que ça doit fonctionner pareil ...

\o/ Merci !

Maintenant je n'ai plus aucune trace visuelle :slight_smile:

Re,

suite aux réponses de Pierre-Yves et Michel qui m'ont bien aidé, voici
le résultat qui fonctionne, si ça peut aider :

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

Amicalement,