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

Excel:通过vba另存为csv并手动生成不同的文件,vba,excel,csv,Vba,Excel,Csv,我需要将几个xlsm文件保存为CSV,以便将它们导入其他程序(如R等)。我已经在所有其他程序中编写了必要的导入例程,它们与案例1配合得非常好: 案例1:手动将xlsm保存为CSV 如果使用此选项并手动将每个文件保存为CSV,并在所有提示中单击“是”,则会得到一个.CSV文件,当在Excel中再次打开时,它看起来与普通Excel文件非常相似。这是一个标准的列视图,没有逗号分隔等(可能是,但看起来不是那样的…) 案例2:将VBA中的xlsm另存为CSV 在Excel中再次打开时,我得到了一个完全不同

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

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

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

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


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

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
选项显式
子测试CSVOUTPUT()
Dim数据手册作为工作簿
将数据表设置为工作表
将文件路径(3)设置为字符串
Dim FileIdx的长度为
'设置测试的文件路径
文件路径(1)=“C:\stack\folder1\test\u file\u 01.xlsm”
文件路径(2)=“C:\stack\folder1\test\u file\u 02.xlsm”
文件路径(3)=“C:\stack\folder1\test\u file\u 03.xlsm”
'循环遍历数组并将每个文件保存为CSV
Application.DisplayAlerts=False
对于FileIdx=1到UBound(filepath)
Set DataBook=Workbooks.Open(filepath(FileIdx))
设置数据表=DataBook.ActiveSheet

DataBook.SaveAs FileFormat:=xlCSV'您使用了SaveAs对话框并使用了.csv(逗号分隔)还是其他格式?确切地说,是SaveAs Diaglog,然后是逗号分隔的dwell,如果您在Excel中查看此文件,它显示了很好的列组织架构。但试图用记事本打开它表明它是分号分隔的数据。这就是你想要的吗?