web-dev-qa-db-fra.com

Convertir un fichier xlsx en csv en utilisant batch

Comment convertir plusieurs fichiers xlsx en fichiers csv avec un script batch?

38
Ankur

Essayez in2csv !

Usage:

in2csv file.xlsx > file.csv
19
marbel

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
6
jsta

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

6
Eric

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

5
jing

Nécessite Excel installé car il utilise le Excel.Applicationobjet 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"
1
npocmaka

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:

  1. ${x%”.xlsx”} est une manipulation de chaîne bash qui extrait .xlsx à partir de la fin de la chaîne. 
  2. in2csv crée des fichiers csv distincts (ne remplace pas les fichiers xlsx).
  3. Ce qui précède ne fonctionnera pas si les noms de fichiers comportent des espaces blancs. Il est bon de convertir les espaces blancs en tirets de soulignement ou quelque chose d'autre avant d'exécuter le script.
1
Anupam

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é 

0
Yakov Kantor