Comment convertir plusieurs fichiers xlsx en fichiers csv avec un script batch?
Pour donner suite à la réponse de l'utilisateur183038, voici un script Shell permettant de renommer par lots tous les fichiers xlsx en csv tout en préservant les noms de fichier. L'outil xlsx2csv doit être installé avant l'exécution.
for i in *.xlsx;
do
filename=$(basename "$i" .xlsx);
outext=".csv"
xlsx2csv $i $filename$outext
done
Obtenez tous les éléments de fichier et filtrez-les par suffixe, puis utilisez l'objet PowerShell Excel VBA pour enregistrer les fichiers Excel dans des fichiers CSV.
$excelApp = New-Object -ComObject Excel.Application
$excelApp.DisplayAlerts = $false
$ExcelFiles | ForEach-Object {
$workbook = $excelApp.Workbooks.Open($_.FullName)
$csvFilePath = $_.FullName -replace "\.xlsx$", ".csv"
$workbook.SaveAs($csvFilePath, [Microsoft.Office.Interop.Excel.XlFileFormat]::xlCSV)
$workbook.Close()
}
Vous pouvez trouver l’exemple complet ici Comment convertir un fichier Excel xlsx en fichier csv en batch par PowerShell
Vous avez besoin d'un outil externe, par exemple: SoftInterface.com - Convertissez XLSX en CSV .
Après l'avoir installé, vous pouvez utiliser la commande suivante dans votre lot:
"c:\Program Files\Softinterface, Inc\Convert XLS\ConvertXLS.EXE" /S"C:\MyExcelFile.xlsx" /F51 /N"Sheet1" /T"C:\MyExcelFile.CSV" /C6 /M1 /V
Nécessite Excel installé car il utilise le Excel.Application
objet com . Enregistrez-le en tant que fichier .bat
:
@if (@X)==(@Y) @end /* JScript comment
@echo off
cscript //E:JScript //nologo "%~f0" %*
exit /b %errorlevel%
@if (@X)==(@Y) @end JScript comment */
var ARGS = WScript.Arguments;
var xlCSV = 6;
var objExcel = WScript.CreateObject("Excel.Application");
var objWorkbook = objExcel.Workbooks.Open(ARGS.Item(0));
objExcel.DisplayAlerts = false;
objExcel.Visible = false;
var objWorksheet = objWorkbook.Worksheets(ARGS.Item(1))
objWorksheet.SaveAs( ARGS.Item(2), xlCSV);
objExcel.Quit();
Il accepte trois arguments: le chemin absolu du fichier xlsx, le nom de la feuille et le chemin absolu du fichier csv cible:
call toCsv.bat "%cd%\Book1.xlsx" Sheet1 "%cd%\csv.csv"
Ajoutant à la réponse de @ marbel (ce qui est une excellente suggestion!), Voici le script qui a fonctionné pour moi sur le terminal de El Capitaine de Mac OS X, pour la conversion batch (puisque c'est ce que l'OP a demandé). Je pensais que ce serait trivial de faire une boucle for
mais ce n’était pas le cas! (Il a fallu changer l'extension par une manipulation de chaîne et il semble que le bash de Mac est un peu différent également)
for x in $(ls *.xlsx); do x1=${x%".xlsx"}; in2csv $x > $x1.csv; echo "$x1.csv done."; done
Remarque:
${x%”.xlsx”}
est une manipulation de chaîne bash qui extrait .xlsx
à partir de la fin de la chaîne. Merci à @ chris-rudd
Voici une version qui gérera plusieurs fichiers glissés et déposés à partir de Windows ..
Christian Lemer
plang
ScottF
https://stackoverflow.com/a/36804963
Ceci utilise VBS et nécessite Excel installé