我需要将几个xlsm文件保存为CSV,以便将它们导入到其他程序(如R等)中。我已经在所有其他程序中编写了必要的导入例程,它们很好地与案例1一起工作:
案例1:如果使用此选项手动将xlsm保存为CSV,然后手动将每个文件保存为CSV并在所有提示下单击“是”,则会得到一个.csv文件,该文件在excel中再次打开时看起来非常类似于普通的.csv文件。这是一个标准的列视图,没有逗号分隔等等(也许是,但它看起来不是那样。)
案例2:将xlsm从VBA保存为CSV --在这里,当在中再次打开时,我会得到一个完全不同的文件。这个文件看起来像一个“真实的”csv文件,所有的值都是逗号分隔的。
我的问题是: 1.为什么有什么不同? 2.我如何通过编程从VBA到达第二种情况?还是说这不可能?
如果2是不可能的,我必须重写我的导入代码例程来处理“正常”的csv file...not,这是非常困难的,但是仍然有很多工作要做,我真的很想知道为什么会有区别。
发布于 2014-04-14 07:50:18
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文件:
在文本编辑器中打开时,每个文件都是逗号分隔的:
https://stackoverflow.com/questions/23058398
复制