[英]Is it possible to batch convert csv to xls using a macro?
我需要.xls
格式的大量csv
文件。 是否可以使用宏運行批量轉換或使用其他語言完成最佳操作?
我使用此代碼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
編輯:文件是格式為csv的.txt文件
通過結合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都會發出警告。
在更少的代碼行中,這應該可以滿足您的需求。 但是,我會說這可能不是完成它的最快方法,因為您每次都在打開,保存和關閉工作簿。 我會尋找一種更快捷的方式,但我忘記了我頭腦中的方法。
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文件類型枚舉 ,如果不是。
斯科特霍爾茲曼法典幾乎為我做了。 我不得不做兩處修改才能讓它發揮作用:
他忘了添加使我們的循環繼續下一個文件的行。 循環之前的最后一行應該讀取
strFile = Dir
Workbooks.Open方法沒有按預期讀取我的CSV文件(整行最終成為第一個單元格中的文本)。 當我添加參數Local:=True
它工作:
Set wb = Workbooks.Open(Filename:=strDir & strFile, Local:=True)
這至少在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&“* .csv”)
做strFile <>“”
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
環
結束子
這是一個很好的問題,我在互聯網上找到了幾個答案。 只進行非常小的更改(我無法編輯已發布的任何代碼)我可以使工作更好一些:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.