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.