Convertir le fichier XLSX en csv en utilisant le traitement par lots
7 réponses
suivi De la réponse par user183038, voici un script shell pour renommer par lots tous les fichiers xlsx 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
Obtenir tous les éléments de fichier et de les filtrer par suffixe, puis utiliser PowerShell Excel VBA objet pour enregistrer les fichiers excel en 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'échantillon complet ici comment convertir un fichier XLSX Excel en fichier csv par lot par PowerShell
Vous avez besoin d'un outil externe, par exemple:SoftInterface.com -convertir XLSX en CSV.
Après l'installation, 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 l'installation d'excel car il utilise le Excel.Application
objet com.Enregistrer ce que .bat
fichier:
@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 vers le fichier xlsx, le nom de la feuille et le chemin absolu vers le fichier csv cible:
call toCsv.bat "%cd%\Book1.xlsx" Sheet1 "%cd%\csv.csv"
ajouter à la réponse de@marbel (ce qui est une excellente suggestion!), voici le script qui a fonctionné pour moi sur Mac OS X El Capitaine du Terminal, pour lot conversion (puisque c'est ce que l'OP a demandé). J'ai pensé que ce serait trivial de faire un for
boucle mais ce n'était pas le cas! (j'ai dû changer L'extension par la manipulation de la chaîne de caractères et il semble que la bash de Mac est un peu différente aussi)
for x in $(ls *.xlsx); do x1=${x%".xlsx"}; in2csv $x > $x1.csv; echo "$x1.csv done."; done
Remarque:
- .xlsx à partir de la fin de la chaîne.
- in2csv crée des fichiers csv séparés (n'écrase pas les xlsx).
- ce qui précède ne fonctionnera pas si les noms de fichiers ont des espaces blancs. Bon pour convertir les espaces blancs en underscores ou quelque chose, avant d'exécuter le script.
crédit à @ chris-rudd
Voici une version qui va gérer plusieurs fichiers glisser-déposer à partir de windows. Basé sur les travaux ci-dessus par
Christian Lemer
plang
ScottF
https://stackoverflow.com/a/36804963
ceci utilise VBS et nécessite L'installation D'Excel