我需要将几个xlsm文件保存为CSV,以便将它们导入其他程序(例如R等)。我已经在所有其他程序中编写了必要的导入程序,并且它们与案例1非常吻合:
案例1:手动将xlsm保存为CSV 如果我使用此选项并手动将每个文件保存为CSV并在所有提示上单击“是”,则会获得一个.csv文件,该文件在excel中再次打开时看起来与普通Excel文件非常相似。这是一个标准的列视图,没有逗号分隔等等(可能它是,但它看起来不是那样..)
案例2:将xlsm从VBA保存为CSV 好吧,我在Excel中再次打开时会得到一个完全不同的文件。这个看起来像一个真实的" csv文件,所有值都以逗号分隔。
我的问题是: 1.为什么有什么区别? 2.如何以编程方式从VBA访问案例2?或者这是不可能的?
如果2是不可能的,我必须重写我的导入代码例程来处理" normal" csv文件...不是很困难,但仍然需要做很多工作,我真的很想知道为什么会有差异......
答案 0 :(得分:1)
Q1:我认为没有区别,至少在我拉到一起的例子中没有。 Q2:试试这个:
我在C:\stack\folder1
中有3个示例XLSM文件,如下图所示:
每个文件都有一个数据表,我们将其转换为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文件:
在文本编辑器中打开时,每个文件都以逗号分隔: