我需要csv
格式的大量.xls
个文件。是否可以使用宏运行批量转换或使用其他语言进行最佳操作?
我已使用此代码http://www.ozgrid.com/forum/showthread.php?t=71409&p=369573#post369573来引用我的目录,但我不确定打开每个文件并保存它们的命令。这就是我所拥有的:
Sub batchconvertcsvxls()
Dim wb As Workbook
Dim CSVCount As Integer
Dim myVar As String
myVar = FileList("C:\Documents and Settings\alistairw\My Documents\csvxlstest")
For i = LBound(myVar) To UBound(myVar)
With wb
Application.Workbooks.OpenText 'How do I reference the myvar string ?
wb.SaveAs '....
End With
Next
End Sub
Function FileList(fldr As String, Optional fltr As String = "*.*") As Variant
Dim sTemp As String, sHldr As String
If Right$(fldr, 1) <> "\" Then fldr = fldr & "\"
sTemp = Dir(fldr & fltr)
If sTemp = "" Then
FileList = Split("No files found", "|") 'ensures an array is returned
Exit Function
End If
Do
sHldr = Dir
If sHldr = "" Then Exit Do
sTemp = sTemp & "|" & sHldr
Loop
FileList = Split(sTemp, "|")
End Function
编辑:文件是.txt文件,格式为csv
答案 0 :(得分:5)
通过结合Scott Holtzman和'ExcelFreak'给出的代码,转换效果非常好。最终的代码看起来像这样:
Sub CSV_to_XLS()
Dim wb As Workbook
Dim strFile As String, strDir As String
strDir = "U:\path\"
strFile = Dir(strDir & "*.csv")
Do While strFile <> ""
Set wb = Workbooks.Open(Filename:=strDir & strFile, Local:=True)
wb.SaveAs Replace(wb.FullName, ".csv", ".xls"), 50 'UPDATE:
wb.Close True
Set wb = Nothing
strFile = Dir
Loop
End Sub
打开转换后的.xls文件会每次都发出警告:
“您尝试打开的文件'filename'的格式与文件扩展名指定的格式不同。在打开文件之前,请验证文件是否已损坏且来自受信任的来源。是否要现在打开文件?“
单击是,然后打开.xls文件。
有没有办法摆脱这条警告信息?每次打开.xls文件时,Excel都会发出警告。
答案 1 :(得分:3)
在更少的代码行中,这应该可以满足您的需求。但是,我会说这可能不是完成它的最快方法,因为您每次都在打开,保存和关闭工作簿。我会寻找一种更快捷的方式,但是我忘了这个方法。
Sub batchconvertcsvxls()
Dim wb As Workbook
Dim strFile As String, strDir As String
strDir = "C:\"
strFile = Dir(strDir & "*.csv")
Do While strFile <> ""
Set wb = Workbooks.Open(strDir & strFile)
With wb
.SaveAs Replace(wb.FullName, ".csv", ".xls"), 50 'UPDATE:
.Close True
End With
Set wb = Nothing
Loop
End Sub
**更新** 你需要一个.xls文件的正确fileformat枚举。我认为它是50,但你可以在这里查看Excel File Type Enumeration,如果不是。
答案 2 :(得分:3)
斯科特霍尔兹曼的守则几乎为我做了。我必须做两处修改才能让它发挥作用:
他忘了添加使我们的循环继续下一个文件的行。 Loop之前的最后一行应该是
strFile = Dir
Workbooks.Open方法未按预期读取我的CSV文件(整行最终成为第一个单元格中的文本)。当我添加参数Local:=True
时,它起作用了:
Set wb = Workbooks.Open(Filename:=strDir & strFile, Local:=True)
答案 3 :(得分:0)
这至少在Excel 2013上正常工作。使用FileFormat:= xlExcel8参数而不是filetype标记50创建在没有安全标记的情况下打开的文件。
Sub CSV_to_XLS()
Dim wb As Workbook Dim strFile As String,strDir As String
strDir =“C:\ temp \” strFile = Dir(strDir&amp;“* .csv”)
同时strFile&lt;&gt; “”
Set wb = Workbooks.Open(Filename:=strDir & strFile, Local:=True)
wb.SaveAs Replace(wb.FullName, ".csv", ".xls"), FileFormat:=xlExcel8
wb.Close True
Set wb = Nothing
strFile = Dir
循环
End Sub
答案 4 :(得分:0)
这是一个很好的问题,我在互联网上找到了几个答案。只进行非常小的更改(我无法编辑已发布的任何代码)我可以让事情变得更好:
Sub CSV_to_XLSX()
Dim wb As Workbook
Dim strFile As String, strDir As String
strDir = "C:\Users\acer\OneDrive\Doctorado\Study 1\data\Retest Bkp\Day 1\Sart\"
strFile = Dir(strDir & "*.csv")
Do While strFile <> ""
Set wb = Workbooks.Open(Filename:=strDir & strFile, Local:=True)
With wb
.SaveAs Replace(wb.FullName, ".csv", ".xlsx"), 51
.Close True
End With
Set wb = Nothing
strFile = Dir
Loop
End Sub