Excel:通过vba保存为csv并手动生成不同的文件
题
我需要将几个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
如下图所示:
每个文件都有一个数据表,我们将把它变成Csv:
我相信你的例程要复杂得多,但是为了测试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文件:
在文本编辑器中打开时,每个文件都以逗号分隔:
不隶属于 StackOverflow