Exportar cada hoja a un file csv por separado

Necesito progtwigrmemáticamente a través de un script VBA / VBS exportar todas las hojas de trabajo (4 en total y conozco los nombres) a la hoja de trabajo llamada files csv en la misma carpeta, sin cargar Excel y ejecutar la macro manualmente.

Idealmente, la secuencia de commands tomaría en la ruta de file de origen / nombre de file.xls y la ruta de file de export como arguments de command-line.

He leído muchos scripts de Excel VBA para hacer justamente eso en Excel y he visto algunos para cargar un libro de Excel para exportar la primera hoja. Sin embargo, cuando trato de mezclar los dos obtengo este error:

(1,12) Fecha de finalización esperada

Dim source As Workbook Set source = Application.Workbooks.Open(WScript.Arguments.Item(0), ReadOnly:=True) For Each sheet In source.Sheets .SaveAs Filename:= WScript.Arguments.Item(1) & Source.Sheets.Name, FileFormat:=xlCSV Next sheet wb.Close 

Un vbs para ejecutar este código se vería así.

  1. El file vbs se puede ejecutar desde la command-line
  2. El nombre de la carpeta es networkingundante, ya que si el file existe (el object FSO lo testing), entonces la carpeta en la que reside también debe existir.
  3. El código automatiza Excel para separar las hojas

dos puntos key a tener en count en comparación con su VBA anterior

  • no puede atenuar un object vbs como una cadena, libro de trabajo, etc. (de ahí su error inicial). Solo puedes atenuarlos
  • no se puede usar una constante con nombre como xlCSV en vbscript, de ahí el uso de 6 a continuación como el formatting CSV

     Dim strFilename Dim objFSO Set objFSO = CreateObject("scripting.filesystemobject") strFilename = "C:\temp\test.xlsx" If objFSO.fileexists(strFilename) Then Call Writefile(strFilename) Else wscript.echo "no such file!" End If Set objFSO = Nothing Sub Writefile(ByVal strFilename) Dim objExcel Dim objWB Dim objws Set objExcel = CreateObject("Excel.Application") Set objWB = objExcel.Workbooks.Open(strFilename) For Each objws In objWB.Sheets objws.Copy objExcel.ActiveWorkbook.SaveAs objWB.Path & "\" & objws.Name & ".csv", 6 objExcel.ActiveWorkbook.Close False Next objWB.Close False objExcel.Quit Set objExcel = Nothing End Sub 

Para empezar:

Dado un libro de Excel que contiene una hoja Demo como

 ------------------------------- SELECT * FROM Demo ------------------------------- |F1|F2 |F3 |F4 | | 1|1.1|12/10/2011|text elm 1| | 2|2.2|12/11/2011|text elm 2| | 3|4.4|12/12/2011|text elm 3| ------------------------------- 

y una connection ADODB.con un ConnectionString como:

 Provider=MSDASQL.1;Extended Properties="DBQ=<FullPathToYourXls>;Driver={Microsoft Excel Driver (*.xls)}; 

todo lo que necesita para ejecutar. Ejecutar es una instrucción SELECT INTO como

 SELECT * INTO [Demo.csv] IN '<PathToYourCsvFolder>' 'Text;' FROM Demo 

Llegar:

 type ..\data\ExcelCsv2\Demo.csv "F1";"F2";"F3";"F4" 1;1,10;10.12.2011 00:00:00;"text elm 1" 2;2,20;11.12.2011 00:00:00;"text elm 2" 3;4,40;12.12.2011 00:00:00;"text elm 3" 

(localidad alemana)

La instrucción SELECT INTO creará la sección apropiada

 [Demo.csv] ColNameHeader=True CharacterSet=1252 Format=Delimited(;) Col1=F1 Integer Col2=F2 Float Col3=F3 Date Col4=F4 Char Width 50 

en el file schema.ini automágicamente.