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.
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.
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.
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.
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 :)
J'ai posté ci-dessous une version légèrement modifiée qui gère mieux les chemins de fichiers. Merci ScottF !
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.
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 ?
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
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.
@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.
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
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 ?
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
Voici quelques conseils pour powershell et excel, blogs.technet.com/heyscriptingguy/archive/2006/09/08/
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
.
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.
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.
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.