将每个工作表导出到单独的csv文件

我需要通过VBA / VBS脚本编程,将所有工作表(总共4个,我知道名称)导出到同一文件夹中名为csv文件的工作表,而不需要加载excel并手动运行macros。

理想情况下,脚本会将源文件path/ filename.xls和导出文件path作为命令行参数。

我已经阅读了许多Excel VBA脚本在Excel中做这个,我已经看到一些加载Excel工作簿导出第一张表。 但是,当我尝试混合两个我得到这个错误:

(1,12)预期结束语句

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 

运行这个代码的vbs看起来像这样。

  1. vbs文件可以从命令行执行
  2. 文件夹名称是多余的,就像文件存在一样(FSO对象为此testing),那么它驻留的文件夹也必须存在
  3. 该代码自动化Excel来分隔工作表

与上面的VBA相比,要注意两点

  • 你不能将一个vbs对象作为一个string,工作簿等(因此你最初的错误)昏暗。 你只能昏暗他们
  • 你不能在vbscript中使用如xlCSV这样的命名常量,所以在下面的6中使用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 

为了让你开始:

给定一个包含工作表演示的Excel工作簿

 ------------------------------- 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| ------------------------------- 

和一个ADODB.Connection与ConnectionString如:

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

所有你需要.Execute是一个SELECT INTO语句

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

要得到:

 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" 

(德语区域)

SELECT INTO语句将创build相应的部分

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

在schema.ini文件中自动。