簡體   English   中英

是否可以使用宏批量轉換csv到xls?

[英]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文件類型枚舉 ,如果不是。

斯科特霍爾茲曼法典幾乎為我做了。 我不得不做兩處修改才能讓它發揮作用:

  1. 他忘了添加使我們的循環繼續下一個文件的行。 循環之前的最后一行應該讀取

    strFile = Dir

  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM