2011-03-10 68 views
34

¿Cómo se convierten múltiples archivos xlsx a archivos csv con un script por lotes?Convertir el archivo xlsx a csv usando el lote

+0

@ ocasoprotal, acepta la respuesta. ¡esto funciona! –

+0

@Brian ¿Huh? No soy el poster original, y por eso no puedo aceptar una respuesta. Simplemente guardé la pregunta. @Ankur tiene que aceptar la respuesta. –

+0

La respuesta de @Swampape funciona bien. Sería bueno si el OP pudiera marcar una respuesta. – Zach

Respuesta

5

Necesita una herramienta externa, por ejemplo: SoftInterface.com - Convert XLSX to CSV.

Después de instalarlo, puede utilizar comando siguiente en el lote:

"c:\Program Files\Softinterface, Inc\Convert XLS\ConvertXLS.EXE" /S"C:\MyExcelFile.xlsx" /F51 /N"Sheet1" /T"C:\MyExcelFile.CSV" /C6 /M1 /V

+0

@gracias al ¡enviar! Esto es justo lo que estaba buscando :) –

+1

Declaración "La línea de comandos no es lo suficientemente poderosa para convertir xlsx en csv". debe ser eliminado (falso), y "Necesita alguna herramienta externa" debe reemplazarse por "Puede usar", etc. Consulte la respuesta de @marbel aquí, por ejemplo (pero hay otras soluciones). –

+0

Ver http://stackoverflow.com/questions/10557360/convert-xlsx-to-csv-in-linux-command-line?rq=1 –

5

Para dar seguimiento a la respuesta por user183038, aquí es un script de shell para lotes cambiar el nombre de todos los archivos xlsx a csv, preservando los nombres de los archivos. La herramienta xlsx2csv debe instalarse antes de ejecutarse.

for i in *.xlsx; 
do 
    filename=$(basename "$i" .xlsx); 
    outext=".csv" 
    xlsx2csv $i $filename$outext 
done 
0

crédito a @ Chris-Rudd

Aquí está una versión que manejar múltiples archivos de arrastrar y soltar de las ventanas. Con base en lo anterior funciona por

Christian Lemer 
plang 
ScottF 

https://stackoverflow.com/a/36804963

Esto utiliza VBS y necesita Excel instalado

0

adición a la respuesta de @ Marbel (que es una gran sugerencia!), Aquí está el script que trabajó para en Mac OS X El Captain's Terminal, para lote conversión (ya que eso es lo que pidió OP). Pensé que sería trivial hacer un ciclo for, pero no fue así. (Tuvo que cambiar la extensión por la manipulación de cadenas y se ve como fiesta de Mac es un poco diferente también)

for x in $(ls *.xlsx); do x1=${x%".xlsx"}; in2csv $x > $x1.csv; echo "$x1.csv done."; done 

Nota:

  1. ${x%”.xlsx”} es fiesta de manipulación de cadenas que se sujeta .xlsx desde el final de la cadena .
  2. in2csv crea archivos csv separados (no sobrescribe los xlsx).
  3. Lo anterior no funcionará si los nombres de los archivos tienen espacios en blanco. Es bueno convertir los espacios en blanco a guiones bajos o algo así, antes de ejecutar el guión.
1

Obtenga todos los elementos del archivo y filtrelos por sufijo y luego utilice el objeto PowerShell Excel VBA para guardar los archivos de Excel en archivos 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() 
} 

puede encontrar la muestra completa aquí How to convert Excel xlsx file to csv file in batch by PowerShell

1

Necesidades instalado Excel, ya que utiliza el Excel.Applicationcom object.Guardar como .bat archivo:

@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(); 

Se acepta tres argumentos - la ruta absoluta al archivo xlsx, el nombre de la hoja y la ruta absoluta al archivo csv objetivo:

call toCsv.bat "%cd%\Book1.xlsx" Sheet1 "%cd%\csv.csv"