113 votes

Convertir XLS en CSV en ligne de commande

Comment convertir un fichier XLS en fichier CSV en ligne de commande Windows.

La machine est équipée de Microsoft Office 2000. Je suis ouvert à l'installation d'OpenOffice si cela n'est pas possible avec Microsoft Office.

131voto

ScottF Points 769

Ouvrez Notepad, créez un fichier appelé XlsToCsv.vbs et collez-y ceci :

if WScript.Arguments.Count < 2 Then
    WScript.Echo "Error! Please specify the source path and the destination. Usage: XlsToCsv SourcePath.xls Destination.csv"
    Wscript.Quit
End If
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook
Set oBook = oExcel.Workbooks.Open(Wscript.Arguments.Item(0))
oBook.SaveAs WScript.Arguments.Item(1), 6
oBook.Close False
oExcel.Quit
WScript.Echo "Done"

Ensuite, à partir d'une ligne de commande, allez dans le dossier où vous avez enregistré le fichier .vbs et exécutez-le :

XlsToCsv.vbs [sourcexlsFile].xls [destinationcsvfile].csv

Pour ce faire, il faut toutefois qu'Excel soit installé sur la machine sur laquelle vous vous trouvez.

22 votes

Au cas où quelqu'un se poserait la question, le paramètre 6 dans la fonction oBook.SaveAs est la constante pour le format CSV.

1 votes

Cela fonctionne très bien, et pas seulement pour les fichiers xls, mais aussi xlsx. Comme dit par Andrew, les chemins des fichiers doivent être soit absolus, soit dans le répertoire "data" de l'utilisateur (je ne suis pas sûr du nom exact en anglais). Je n'ai toujours pas trouvé comment résoudre ce problème, je ne fais pas beaucoup de vbscript :)

3 votes

J'ai posté ci-dessous une version légèrement modifiée qui gère mieux les chemins de fichiers. Merci ScottF !

84voto

plang Points 1783

Une version légèrement modifiée de la réponse de ScottF, qui ne nécessite pas de chemins de fichiers absolus :

if WScript.Arguments.Count < 2 Then
    WScript.Echo "Please specify the source and the destination files. Usage: ExcelToCsv <xls/xlsx source file> <csv destination file>"
    Wscript.Quit
End If

csv_format = 6

Set objFSO = CreateObject("Scripting.FileSystemObject")

src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1))

Dim oExcel
Set oExcel = CreateObject("Excel.Application")

Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)

oBook.SaveAs dest_file, csv_format

oBook.Close False
oExcel.Quit

J'ai renommé le script ExcelToCsv, puisque ce script n'est pas du tout limité aux xls. xlsx Fonctionne très bien, comme on pouvait s'y attendre.

Testé avec Office 2010.

0 votes

Je l'utilise (avec quelques adaptations) pour convertir du XML en XLS. Cependant, je ne veux pas avoir le message d'avertissement de compatibilité d'Excel pendant cette conversion. Savez-vous comment je peux désactiver cet avertissement ?

0 votes

Existe-t-il un moyen d'enregistrer ce fichier en tant que jeu de caractères Unicode ?

3 votes

J'ai rassemblé cette réponse et celle de @user565869 dans un Gist avec des instructions simples. Voir : script pour convertir un fichier Excel en CSV

28voto

Jon of All Trades Points 1925

Une petite extension du groovy VB script de ScottF : ce fichier batch va parcourir en boucle les fichiers .xlsx d'un répertoire et les convertir en fichiers *.csv :

FOR /f "delims=" %%i IN ('DIR *.xlsx /b') DO ExcelToCSV.vbs "%%i" "%%i.csv"

Note : Vous pouvez changer l'extension .xlsx en .xls et le nom du script ExcelToCSV en XlsToCsv.

1 votes

@Rieaux : En ce qui concerne votre commentaire en tant qu'édition : si cela donne aux fichiers une double extension, un deuxième fichier batch simple peut les renommer. Ceci dérive vers une nouvelle question, cependant ; s'il vous plaît, essayez et, si vous n'arrivez pas à le faire fonctionner, posez une nouvelle question ici sur SU.

0 votes

Cette automatisation m'a sauvé la vie :) Merci.

2 votes

J'ai rassemblé cette réponse et celle de @plang dans un Gist avec des instructions simples. Voir : script pour convertir un fichier Excel en CSV

19voto

YOU Points 44812

Et avec PowerShell ?

Le code devrait ressembler à ceci, mais il n'a pas été testé.

$xlCSV = 6
$Excel = New-Object -Com Excel.Application 
$Excel.visible = $False 
$Excel.displayalerts=$False 
$WorkBook = $Excel.Workbooks.Open("YOUDOC.XLS") 
$Workbook.SaveAs("YOURDOC.csv",$xlCSV) 
$Excel.quit()

Voici un post expliquant comment l'utiliser

Comment utiliser Windows PowerShell pour automatiser Microsoft Excel ?

0 votes

Cela semble être une bonne approche. Malheureusement, je n'ai pas réussi à la faire fonctionner. Je ne suis pas familier avec PowerShell, donc lorsque j'ai rencontré une erreur, je ne savais pas quoi faire. Je n'ai pas trouvé de solution spécifique à PowerShell : support.microsoft.com/kb/320369

0 votes

Voici quelques conseils pour powershell et excel, blogs.technet.com/heyscriptingguy/archive/2006/09/08/

0 votes

J'ai fait un essai de ce système et j'ai rencontré des problèmes également. J'ai notamment rencontré des difficultés avec le $Excel.Workbooks.Open méthode. Il ne pouvait pas trouver le fichier spécifié. J'ai contourné ce problème en utilisant Get-Item sur le fichier et l'acheminer vers un ForEach-Object (ce que je finirai par faire dans mon implémentation finale de toute façon) pour les deux lignes commençant par $Workbook .

5voto

Jay Riggs Points 30783

Pourquoi ne pas écrire le vôtre ?

Je vois sur votre profil que vous avez au moins une certaine expérience en C#/.NET. Je créerais une application console Windows et utiliserais un lecteur Excel gratuit pour lire votre/vos fichier(s) Excel. J'ai utilisé Lecteur de données Excel disponible à partir de CodePlex sans aucun problème (une chose intéressante : ce lecteur ne nécessite pas l'installation d'Excel). Vous pouvez appeler votre application console depuis la ligne de commande.

Si vous vous trouvez coincé, postez ici et je suis sûr que vous obtiendrez de l'aide.

0 votes

En fait, je n'ai jamais écrit de C#. Mais je pense que je vais m'y essayer avec le lecteur de données Excel.

3 votes

Un peu exagéré, vous ne trouvez pas ? Ça sent le NIH.

1 votes

Je ne pense pas que le lecteur de données Excel soit du NIH. Tout d'abord, quelqu'un d'autre l'a écrit. Deuxièmement, il résout le problème mieux qu'Excel complet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X