convertir windows excel csv

windows - convertir - Convierta XLS a CSV en línea de comando



convertir csv a excel (12)

¿Cómo podría convertir un archivo XLS en un archivo CSV en la línea de comandos de Windows?

La máquina tiene instalado Microsoft Office 2000. Estoy abierto a instalar OpenOffice si no es posible usar Microsoft Office.


¿Por qué no lo escribes tu mismo?

Veo en tu perfil que tienes al menos algo de experiencia en C # / .NET. Crearía una aplicación de consola de Windows y usaría un lector de Excel gratuito para leer en su (s) archivo (s) de Excel. He utilizado Excel Data Reader disponible en CodePlex sin ningún problema (una cosa buena: este lector no requiere que se instale Excel). Puede llamar a su aplicación de consola desde la línea de comando.

Si te encuentras atrapado publicar aquí y estoy seguro de que obtendrá ayuda.


¿Qué tal con PowerShell?

El código debería verse así, aunque no probado

$xlCSV = 6 $Excel = New-Object -Com Excel.Application $Excel.visible = $False $Excel.displayalerts=$False $WorkBook = $Excel.Workbooks.Open("YOUDOC.XLS") $Workbook.SaveAs("YOURDOC.csv",$xlCSV) $Excel.quit()

Aquí hay una publicación que explica cómo usarlo

¿Cómo puedo usar Windows PowerShell para automatizar Microsoft Excel?


Abra el Bloc de notas, cree un archivo llamado XlsToCsv.vbs y péguelo en:

if WScript.Arguments.Count < 2 Then WScript.Echo "Error! Please specify the source path and the destination. Usage: XlsToCsv SourcePath.xls Destination.csv" Wscript.Quit End If Dim oExcel Set oExcel = CreateObject("Excel.Application") Dim oBook Set oBook = oExcel.Workbooks.Open(Wscript.Arguments.Item(0)) oBook.SaveAs WScript.Arguments.Item(1), 6 oBook.Close False oExcel.Quit WScript.Echo "Done"

Luego, desde una línea de comando, vaya a la carpeta donde guardó el archivo .vbs y ejecute:

XlsToCsv.vbs [sourcexlsFile].xls [destinationcsvfile].csv

Sin embargo, esto requiere que Excel esté instalado en la máquina en la que se encuentra.


Aquí hay una versión que manejará varios archivos arrastrados y soltados desde Windows. Basado en los trabajos anteriores de

Christian Lemer plang ScottF

Abra el Bloc de notas, cree un archivo llamado XlsToCsv.vbs y péguelo en:

''* Usage: Drop .xl* files on me to export each sheet as CSV ''* Global Settings and Variables Dim gSkip Set args = Wscript.Arguments For Each sFilename In args iErr = ExportExcelFileToCSV(sFilename) '' 0 for normal success '' 404 for file not found '' 10 for file skipped (or user abort if script returns 10) Next WScript.Quit(0) Function ExportExcelFileToCSV(sFilename) ''* Settings Dim oExcel, oFSO, oExcelFile Set oExcel = CreateObject("Excel.Application") Set oFSO = CreateObject("Scripting.FileSystemObject") iCSV_Format = 6 ''* Set Up sExtension = oFSO.GetExtensionName(sFilename) if sExtension = "" then ExportExcelFileToCSV = 404 Exit Function end if sTest = Mid(sExtension,1,2) ''* first 2 letters of the extension, vb''s missing a Like operator if not (sTest = "xl") then if (PromptForSkip(sFilename,oExcel)) then ExportExcelFileToCSV = 10 Exit Function end if End If sAbsoluteSource = oFSO.GetAbsolutePathName(sFilename) sAbsoluteDestination = Replace(sAbsoluteSource,sExtension,"{sheet}.csv") ''* Do Work Set oExcelFile = oExcel.Workbooks.Open(sAbsoluteSource) For Each oSheet in oExcelFile.Sheets sThisDestination = Replace(sAbsoluteDestination,"{sheet}",oSheet.Name) oExcelFile.Sheets(oSheet.Name).Select oExcelFile.SaveAs sThisDestination, iCSV_Format Next ''* Take Down oExcelFile.Close False oExcel.Quit ExportExcelFileToCSV = 0 Exit Function End Function Function PromptForSkip(sFilename,oExcel) if not (VarType(gSkip) = vbEmpty) then PromptForSkip = gSkip Exit Function end if Dim oFSO Set oFSO = CreateObject("Scripting.FileSystemObject") sPrompt = vbCRLF & _ "A filename was received that doesn''t appear to be an Excel Document." & vbCRLF & _ "Do you want to skip this and all other unrecognized files? (Will only prompt this once)" & vbCRLF & _ "" & vbCRLF & _ "Yes - Will skip all further files that don''t have a .xl* extension" & vbCRLF & _ "No - Will pass the file to excel regardless of extension" & vbCRLF & _ "Cancel - Abort any further conversions and exit this script" & vbCRLF & _ "" & vbCRLF & _ "The unrecognized file was:" & vbCRLF & _ sFilename & vbCRLF & _ "" & vbCRLF & _ "The path returned by the system was:" & vbCRLF & _ oFSO.GetAbsolutePathName(sFilename) & vbCRLF sTitle = "Unrecognized File Type Encountered" sResponse = MsgBox (sPrompt,vbYesNoCancel,sTitle) Select Case sResponse Case vbYes gSkip = True Case vbNo gSkip = False Case vbCancel oExcel.Quit WScript.Quit(10) ''* 10 Is the error code I use to indicate there was a user abort (1 because wasn''t successful, + 0 because the user chose to exit) End Select PromptForSkip = gSkip Exit Function End Function


Hay un proveedor de datos Excel OLEDB integrado en Windows; puede usar esto para ''consultar'' la hoja de Excel a través de ADO.NET y escribir los resultados en un archivo CSV. Se requiere una pequeña cantidad de codificación, pero no debería necesitar instalar nada en la máquina.


Intenté la solución ScottF VB y lo hice funcionar. Sin embargo, quería convertir un archivo Excel de varias pestañas (libro de trabajo) en un solo archivo .csv.

Esto no funcionó, solo se copió una pestaña (la que se resalta cuando la abro a través de Excel).

¿Alguien sabe de un script que puede convertir un archivo de Excel de múltiples pestañas en un solo archivo .csv?


La respuesta de Scott F es la mejor que he encontrado en Internet. Añadí su código para satisfacer mis necesidades. Yo añadí:

On Error Resume Next <- Para dar cuenta de la falta de archivos xls en el procesamiento de mi lote en la parte superior. oBook.Application.Columns ("A: J"). NumberFormat = "@" <- Antes de la línea SaveAs para asegurarme de que mis datos se guardan formateados como texto para evitar que Excel elimine los ceros iniciales y elimine las comas en cadenas de números en mis datos es decir (1.200 a 1.200). El rango de la columna debe ajustarse para cumplir con sus necesidades (A: J).

También eliminé el eco "hecho" para que no sea interactivo.

A continuación, agregué el script en un archivo por lotes cmd para procesar datos automatizados por hora a través de una tarea.


Puede hacerlo con Alacon - utilidad de línea de comandos para la base de datos Alasql . Funciona con Node.js, por lo que debe instalar Node.js y luego el paquete Alasql .

Para convertir un archivo Excel a CVS (ot TSV) puede ingresar:

> node alacon "SELECT * INTO CSV(''mydata.csv'', {headers:true}) FROM XLS(''mydata.xls'', {headers:true})"

Por defecto, Alasql convierte los datos de "Sheet1", pero puede cambiarlos con los parámetros:

{headers:false, sheetid: ''Sheet2'', range: ''A1:C100''}

Alacon admite otro tipo de conversiones (CSV, TSV, TXT, XLSX, XLS) y construcciones de lenguaje SQL (consulte el Manual de usuario para ver ejemplos).


Sobre la base de lo que Jon of All Trades ha proporcionado, el siguiente (~ n) eliminó el molesto problema de doble extensión: FOR /f "delims=" %%i IN (''DIR *.xlsx /b'') DO ExcelToCSV.vbs "%%i" "%%~ni.csv"


Tuve la necesidad de extraer varios cvs de diferentes hojas de trabajo, así que aquí hay una versión modificada del código de plang que le permite especificar el nombre de la hoja de trabajo.

if WScript.Arguments.Count < 3 Then WScript.Echo "Please specify the sheet, the source, the destination files. Usage: ExcelToCsv <sheetName> <xls/xlsx source file> <csv destination file>" Wscript.Quit End If csv_format = 6 Set objFSO = CreateObject("Scripting.FileSystemObject") src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(1)) dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(2)) Dim oExcel Set oExcel = CreateObject("Excel.Application") Dim oBook Set oBook = oExcel.Workbooks.Open(src_file) oBook.Sheets(WScript.Arguments.Item(0)).Select oBook.SaveAs dest_file, csv_format oBook.Close False oExcel.Quit


Una pequeña expansión en la secuencia de comandos VB groovy de ScottF: este archivo de proceso por lotes recorrerá los archivos .xlsx en un directorio y los volcará en archivos * .csv:

FOR /f "delims=" %%i IN (''DIR *.xlsx /b'') DO ExcelToCSV.vbs "%%i" "%%i.csv"

Nota: Puede cambiar la extensión .xlsx a .xls y el nombre del script ExcelToCSV a XlsToCsv


Una versión ligeramente modificada de la respuesta de ScottF, que no requiere rutas absolutas de archivos:

if WScript.Arguments.Count < 2 Then WScript.Echo "Please specify the source and the destination files. Usage: ExcelToCsv <xls/xlsx source file> <csv destination file>" Wscript.Quit End If csv_format = 6 Set objFSO = CreateObject("Scripting.FileSystemObject") src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0)) dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1)) Dim oExcel Set oExcel = CreateObject("Excel.Application") Dim oBook Set oBook = oExcel.Workbooks.Open(src_file) oBook.SaveAs dest_file, csv_format oBook.Close False oExcel.Quit

Cambié el nombre del script a ExcelToCsv, ya que este script no está limitado a xls. xlsx funciona bien, como podríamos esperar.

Probado con Office 2010.