Excel:通过vba另存为csv并手动生成不同的文件

时间:2014-04-14 11:00:54

标签: excel vba excel-vba csv

我需要将几个xlsm文件保存为CSV,以便将它们导入其他程序(例如R等)。我已经在所有其他程序中编写了必要的导入程序,并且它们与案例1非常吻合:

案例1:手动将xlsm保存为CSV 如果我使用此选项并手动将每个文件保存为CSV并在所有提示上单击“是”,则会获得一个.csv文件,该文件在excel中再次打开时看起来与普通Excel文件非常相似。这是一个标准的列视图,没有逗号分隔等等(可能它是,但它看起来不是那样..)

案例2:将xlsm从VBA保存为CSV 好吧,我在Excel中再次打开时会得到一个完全不同的文件。这个看起来像一个真实的" csv文件,所有值都以逗号分隔。

我的问题是: 1.为什么有什么区别? 2.如何以编程方式从VBA访问案例2?或者这是不可能的?

如果2是不可能的,我必须重写我的导入代码例程来处理" normal" csv文件...不是很困难,但仍然需要做很多工作,我真的很想知道为什么会有差异......

1 个答案:

答案 0 :(得分:1)

Q1:我认为没有区别,至少在我拉到一起的例子中没有。 Q2:试试这个:

我在C:\stack\folder1中有3个示例XLSM文件,如下图所示:

start2

每个文件都有一个数据表,我们将其转换为CSV:

start

我确定您的日常工作要复杂得多,但为了测试CSV输出,我只是循环浏览文件并将每个文件保存为xlCSV

Option Explicit
Sub TestCSVOutput()

Dim DataBook As Workbook
Dim DataSheet As Worksheet
Dim FilePaths(3) As String
Dim FileIdx As Long

'set up file paths for test
FilePaths(1) = "C:\stack\folder1\test_file_01.xlsm"
FilePaths(2) = "C:\stack\folder1\test_file_02.xlsm"
FilePaths(3) = "C:\stack\folder1\test_file_03.xlsm"

'loop through array and save each file as a CSV
Application.DisplayAlerts = False
For FileIdx = 1 To UBound(FilePaths)

    Set DataBook = Workbooks.Open(FilePaths(FileIdx))
    Set DataSheet = DataBook.ActiveSheet
    DataBook.SaveAs FileFormat:=xlCSV '<~~ the save step
    DataBook.Close

Next FileIdx
Application.DisplayAlerts = True

End Sub

脚本完成后,我最终会得到三个CSV文件:

end2

在文本编辑器中打开时,每个文件都以逗号分隔:

enter image description here