Convertir le fichier XLSX en csv en utilisant le traitement par lots

comment convertir plusieurs fichiers XLSX en fichiers csv avec un script batch?

37
demandé sur Zach 2011-03-10 10:34:46

7 réponses

in2csv!

Utilisation:

in2csv file.xlsx > file.csv
18
répondu marbel 2015-04-23 18:31:19

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
6
répondu jsta 2014-12-05 12:02:38

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

6
répondu Eric 2017-03-30 05:49:34

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

5
répondu jing 2016-10-04 09:45:16

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"
1
répondu npocmaka 2017-03-30 11:09:27

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:

  1. .xlsx à partir de la fin de la chaîne.
  2. in2csv crée des fichiers csv séparés (n'écrase pas les xlsx).
  3. 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.
1
répondu Anupam 2018-08-21 22:51:30

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

0
répondu Yakov Kantor 2017-05-23 12:32:28