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

时间:2011-12-08 17:23:03

标签: excel excel-vba csv vbscript vba

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

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

我已经阅读了许多用于在Excel中执行此操作的Excel VBA脚本,并且我已经看到一些用于加载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

2 个答案:

答案 0 :(得分:10)

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

  1. 可以从命令行
  2. 执行vbs文件
  3. 文件夹名称是多余的,就好像文件存在(FSO对象为此测试),然后它所在的文件夹也必须存在
  4. 代码自动化Excel以分隔工作表
  5. 与上面的VBA相比,需要注意的两个要点

    • 你不能将vbs对象变暗为字符串,工作簿等(因此你的初始错误)。你只能暗他们
    • 您无法在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  
      

答案 1 :(得分:-1)

为了帮助您入门:

给定一个包含表单演示的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|
-------------------------------

和一个带有ConnectionString的ADODB.Connection,如:

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语句将创建适当的部分

[Demo.csv]
ColNameHeader=True
CharacterSet=1252
Format=Delimited(;)
Col1=F1 Integer
Col2=F2 Float
Col3=F3 Date
Col4=F4 Char Width 50
在schema.ini文件中自动