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

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

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

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

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

有帮助吗?

解决方案

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top