Note: The other languages of the website are Google-translated. Back to English

如何在Excel中將多個Excel文件批量轉換為CSV文件?

在Excel中,我們可以使用“另存為”功能將工作簿轉換為CSV文件,但是您知道如何將多個Excel文件批量轉換為單獨的CSV文件嗎? 在本文中,我介紹了一個VBA代碼,用於將文件夾中的所有Excel文件批量轉換為Excel中的CSV文件。

使用VBA將文件夾的Excel文件批量轉換為CSV文件

使用Kutools for Excel將工作簿表轉換為單獨的CSV文件好主意3


使用VBA將文件夾的Excel文件批量轉換為CSV文件

在Excel中,除了VBA,沒有內置函數可以快速解決此問題。

1.啟用Excel,然後按 Alt + F11鍵 鑰匙打開 Microsoft Visual Basic for Applications 窗口。

2。 點擊 插入 > 模塊 創建一個新的模塊。

3.複製以下代碼並將其粘貼到新的“模塊”窗口中。

VBA:將Excel文件批量轉換為CSV

Sub WorkbooksSaveAsCsvToFolder()

'UpdatebyExtendoffice20181031

Dim xObjWB As Workbook

Dim xObjWS As Worksheet

Dim xStrEFPath As String

Dim xStrEFFile As String

Dim xObjFD As FileDialog

Dim xObjSFD As FileDialog

Dim xStrSPath As String

Dim xStrCSVFName As String

Dim xS  As String

    Application.ScreenUpdating = False

    Application.EnableEvents = False

    Application.Calculation = xlCalculationManual

    Application.DisplayAlerts = False

    On Error Resume Next

Set xObjFD = Application.FileDialog(msoFileDialogFolderPicker)

    xObjFD.AllowMultiSelect = False

    xObjFD.Title = "Kutools for Excel - Select a folder which contains Excel files"

    If xObjFD.Show <> -1 Then Exit Sub

    xStrEFPath = xObjFD.SelectedItems(1) & "\"

    Set xObjSFD = Application.FileDialog(msoFileDialogFolderPicker)

 
    xObjSFD.AllowMultiSelect = False

    xObjSFD.Title = "Kutools for Excel - Select a folder to locate CSV files"

    If xObjSFD.Show <> -1 Then Exit Sub

    xStrSPath = xObjSFD.SelectedItems(1) & "\"


    xStrEFFile = Dir(xStrEFPath & "*.xls*")


    Do While xStrEFFile <> ""

       xS = xStrEFPath & xStrEFFile

        Set xObjWB = Application.Workbooks.Open(xS)

        xStrCSVFName = xStrSPath & Left(xStrEFFile, InStr(1, xStrEFFile, ".") - 1) & ".csv"

        xObjWB.SaveAs Filename:=xStrCSVFName, FileFormat:=xlCSV

        xObjWB.Close savechanges:=False

        xStrEFFile = Dir

  Loop

    Application.Calculation = xlCalculationAutomatic

    Application.EnableEvents = True

    Application.ScreenUpdating = True

    Application.DisplayAlerts = True

End Sub

4。 按 F5 鍵,在第一個彈出對話框中選擇包含要轉換為CSV文件的Excel文件的文件夾。
doc批處理到csv 1

5。 點擊 OK,然後在第二個彈出對話框中,選擇要放置CSV文件的文件夾。
doc批處理到csv 2

6。 點擊 OK,現在文件夾中的Excel文件已轉換為CSV文件並保存在另一個文件夾中。
doc批處理到csv 3


使用Kutools for Excel將工作簿表轉換為單獨的CSV文件

眾所周知,我們只能使用Excel的另存為功能將整個工作簿轉換為一個CSV文件。 但是有時候,您希望將單個工作表轉換為CSV文件,在這種情況下, 拆分工作簿 的效用 Excel的Kutools 可以幫你。

Excel的Kutools, 與以上 300 方便的功能,使您的工作更加輕鬆。 

安裝後 Kutools for Excel,請執行以下操作:(立即免費下載Kutools for Excel!)

1.啟用要將其工作表轉換為單獨的CSV文件的工作簿,單擊 Kutools 加 > 工作簿 > 拆分工作簿.
doc批處理到csv 4

2。 在裡面 拆分工作簿 對話框中,檢查要拆分的工作表名稱(默認情況下選中所有工作表),然後選中 除上文所 類型,選擇 CSV(Macintosh)(* .CSV) 從下拉列表中選擇。
doc批處理到csv 5

3。 點擊 分裂 彈出 瀏覽文件夾 對話框中,選擇或創建一個文件夾以放置CSV文件。
doc批處理到csv 6

4。 點擊 OK,現在工作簿已拆分為單獨的CSV文件。
doc批處理到csv 7


最佳辦公效率工具

Kutools for Excel 解決了你的大部分問題,並將你的生產力提高了 80%

  • 重用: 快速插入 複雜的公式,圖表 以及您以前使用過的任何東西; 加密單元 帶密碼 創建郵件列表 並發送電子郵件...
  • 超級公式欄 (輕鬆編輯多行文本和公式); 閱讀版式 (輕鬆讀取和編輯大量單元格); 粘貼到過濾範圍...
  • 合併單元格/行/列 不會丟失數據; 拆分單元格內容; 合併重複的行/列...防止細胞重複; 比較範圍...
  • 選擇重複或唯一 行; 選擇空白行 (所有單元格都是空的); 超級查找和模糊查找 在許多工作簿中; 隨機選擇...
  • 確切的副本 多個單元格,無需更改公式參考; 自動創建參考 到多張紙; 插入項目符號,複選框等...
  • 提取文字,添加文本,按位置刪除, 刪除空間; 創建和打印分頁小計; 在單元格內容和註釋之間轉換...
  • 超級濾鏡 (將過濾方案保存並應用於其他工作表); 高級排序 按月/週/日,頻率及更多; 特殊過濾器 用粗體,斜體...
  • 結合工作簿和工作表; 根據關鍵列合併表; 將數據分割成多個工作表; 批量轉換xls,xlsx和PDF...
  • 超過 300 項強大的功能. 支持 Office / Excel 2007-2021 和 365。支持所有語言。 在您的企業或組織中輕鬆部署。 完整功能 30 天免費試用。 60 天退款保證。
kte選項卡201905

Office選項卡為Office帶來了選項卡式界面,使您的工作更加輕鬆

  • 在Word,Excel,PowerPoint中啟用選項卡式編輯和閱讀,發布者,Access,Visio和Project。
  • 在同一窗口的新選項卡中而不是在新窗口中打開並創建多個文檔。
  • 將您的工作效率提高 50%,每天為您減少數百次鼠標點擊!
officetab底部
按評論排序
留言 (36)
還沒有評分。 成為第一位評論!
網站主持人對此評論進行了最小化
親愛的,它真的很管用!
網站主持人對此評論進行了最小化
很好用,感謝代碼!
我唯一要說的是,當有“。”時,文件名的代碼會被剪切。 在文件名本身(例如 file.123.csv 變成 file.csv)。
網站主持人對此評論進行了最小化
你找到解決這個問題的方法了嗎?
網站主持人對此評論進行了最小化
頌歌,

在第 33 行,我替換了以下代碼:

xStrCSVFName = xStrSPath & Left(xStrEFFile, InStr(1, xStrEFFile, ".") - 1) & ".csv"

使用此代碼:

xStrCSVFName = xStrSPath & Left(xStrEFFile, InStr(1, xStrEFFile, ".xlsx") - 1) & ".csv"

請注意,如果您使用其他一些 excel 擴展名(.xls、.xlsm 等),您應該將其更改為 :)
網站主持人對此評論進行了最小化
非常感謝! 這為我節省了很多時間!
網站主持人對此評論進行了最小化
另一個小評論:

如果原始 Excel 文件中的單元格都格式化為“常規”,則在將文件另存為 CSV 時會丟失一些準確性
例如,如果 Excel 中的單元格值為 0.123456789123456,則 CSV 中的值將為 0.123456789(缺少剩餘的小數),只要該單元格的格式為“常規”。 這可以通過將 Excel 文件中的所有單元格格式化為“常規”以外的任何內容(例如“文本”)來解決。 在這種情況下,CSV *將*仍然具有完整的細節/準確性。 即 Excel 文件中的值在另存為 CSV 後將完全不變。

這個宏怎麼可能改變,所以它在保存為 CSV 之前將 Excel 文件中所有單元格的格式設置為“文本”?
我想它必須以某種方式利用以下內容,但我無法弄清楚如何正確地包含在宏中:

單元格選擇
Selection.NumberFormat = "@"
網站主持人對此評論進行了最小化
感謝你的分享。 我正在嘗試保存多個包含唯一值的 xls 文件,在保存之前會提示詢問是或否。 提示內容為..

“如果您將工作簿中的某些功能保存為 CSV(逗號分隔),則可能會丟失。您想繼續使用該格式嗎?”

有人知道在哪裡添加代碼來回答這個提示嗎?
網站主持人對此評論進行了最小化
我認為值得為帶有特殊字符的文件添加更好的錯誤處理,目前它們被簡單地忽略了。
網站主持人對此評論進行了最小化
頂謝謝:)
網站主持人對此評論進行了最小化
這真太了不起了。 謝謝!
網站主持人對此評論進行了最小化
您好,是否對代碼進行了快速更改,可以讓我從 CSV UTF-8(逗號分隔)更改為 CSV(逗號分隔)? 我嘗試了第一種方法並充滿希望,但似乎不會改變它們,因為它們已經是某種形式的 CSV。 也許有一個更簡單的過程,但我找不到任何東西。 我必須轉換以這種格式保存的 150 個文件,我不想打開每個文件並另存為,好像我可以避免它一樣。 任何幫助表示讚賞!
網站主持人對此評論進行了最小化
因此,在仔細查看代碼後,我發現初始文件類型必須是 .xls。 所以用 .csv 替換已經解決了這個問題。
網站主持人對此評論進行了最小化
您好!
das Makro funktioniert ganz gut, aber bei mir kommt, wenn ich als 文件名:xlCSVUTF8 eine anders formatierte CSV raus als ich über speichern unter -> csv(utf8) erreiche!
網站主持人對此評論進行了最小化
xObjWB.S​​aveAs 文件名:=xStrCSVFName,文件格式:=xlCSVUTF8
網站主持人對此評論進行了最小化
還有 er schreibt die verschiedenen Spalten alle in eine Spalte, dass müsste der Fehler sein ?!
網站主持人對此評論進行了最小化
嗨..在一些將轉換為csv的excel文件中,有一個必須四捨五入的標稱,解決方案是什麼? 謝謝你
網站主持人對此評論進行了最小化
嗨,Sam,除了在將文件轉換為 csv 之前將數據格式化為文本之外,沒有解決此問題的解決方案。
網站主持人對此評論進行了最小化
當我運行它時,它只轉換了第一個工作表,並忽略了工作簿中的其他工作表。 有沒有辦法編輯代碼以包含其他工作表?
網站主持人對此評論進行了最小化
嗨,你可以試試下面的代碼,它會將文件夾中的所有工作簿單獨保存到 csv 中。 它不能工作當前的工作簿。
Sub WorkbooksSaveAsCsvToFolder()

'UpdatebyExtendoffice20220520

Dim xObjWB As Workbook

Dim xObjWS As Worksheet

Dim xStrEFPath As String

Dim xStrEFFile As String

Dim xObjFD As FileDialog

Dim xObjSFD As FileDialog

Dim xStrSPath As String

Dim xStrCSVFName As String

Dim xWSh As Worksheet

    Application.ScreenUpdating = False

    Application.EnableEvents = False

    Application.Calculation = xlCalculationManual

    On Error Resume Next

Set xObjFD = Application.FileDialog(msoFileDialogFolderPicker)

    xObjFD.AllowMultiSelect = False

    xObjFD.Title = "Kutools for Excel - Select a folder which contains Excel files"

    If xObjFD.Show <> -1 Then Exit Sub

    xStrEFPath = xObjFD.SelectedItems(1) & "\"

    Set xObjSFD = Application.FileDialog(msoFileDialogFolderPicker)

    xObjSFD.AllowMultiSelect = False

    xObjSFD.Title = "Kutools for Excel - Select a folder to locate CSV Files "

    If xObjSFD.Show <> -1 Then Exit Sub

    xStrSPath = xObjSFD.SelectedItems(1) & "\"

    xStrEFFile = Dir(xStrEFPath & "*.xls*")

    Do While xStrEFFile <> ""

        Set xObjWB = Workbooks.Open(Filename:=xStrEFPath & xStrEFFile)

        For Each xWSh In xObjWB.Worksheets

            xWSh.Activate

            xStrCSVFName = xStrSPath & Left(xStrEFFile, InStr(1, xStrEFFile, ".") - 1) & "_" & xWSh.Name & ".csv"

            xObjWB.SaveAs Filename:=xStrCSVFName, FileFormat:=xlCSV

        Next

        xStrCSVFName = xStrSPath & Left(xStrEFFile, InStr(1, xStrEFFile, ".") - 1) & ".csv"

        xObjWB.SaveAs Filename:=xStrCSVFName, FileFormat:=xlCSV

        xObjWB.Close savechanges:=False

        xStrEFFile = Dir

  Loop

    Application.Calculation = xlCalculationAutomatic

    Application.EnableEvents = True

    Application.ScreenUpdating = True

End Sub
網站主持人對此評論進行了最小化
嗨桑尼
通過對相同代碼的任何修改,我可以在所有文件中只提取一個工作表名稱相同的工作表嗎?
網站主持人對此評論進行了最小化
嗨,Prashant,我沒聽清楚你的問題。 猜猜看:如果有兩個工作簿book1和book2,都包含一個sheet1,你是不是只想從這兩個工作簿中得到一個sheet(sheet1),而另一個sheet1不需要提取?
網站主持人對此評論進行了最小化
無法讓它適用於我的 xls 文件。 它們是 97-03 工作表,我目前正在運行最活躍的 microsoft 365 版本。 當我運行代碼時,文件夾顯示為空白
網站主持人對此評論進行了最小化
您好,很抱歉您的問題在我的版本中沒有再次出現,我不知道如何幫助您。
網站主持人對此評論進行了最小化
跟我一樣的問題。 運行最新的office 365,但設置兩個文件夾對話框後沒有任何反應。
網站主持人對此評論進行了最小化
您好,Doc SJ,感謝您的提醒,我已經檢查了 VBA 代碼,它在 Office 365 中存在一些問題,現在我已經更新了 VBA,請重試。
網站主持人對此評論進行了最小化
邦迪亞!!

muito top esse codigo,porem estou com o problema abaixo

Tem como salvar em formato "CSV (separado por vírgulas) (*.csv)", pois ao executar esse código meus arquivos ficam com"," no formato que eu preciso eles não ficam com essa vírgula
網站主持人對此評論進行了最小化
2019버전입니다.
게시글그대로실행해봤지만한무것도일어나지않았습니다..
網站主持人對此評論進行了最小化
嗨,YOY,我已經在 Professional Plus Excel 2019 中測試了 VBA,它運行順利且正確。 您是否應該向我提供有關您的文件的更多詳細信息,例如詳細的版本、要轉換的文件的內容?
網站主持人對此評論進行了最小化
你好,如何更改分隔符?
在上面的腳本中,分隔符是逗號 (,)。
謝謝你:D
網站主持人對此評論進行了最小化
嗨,
我在使用腳本時遇到了一些問題
我可以更改腳本中的分隔符嗎,因為 csv 輸出中的分隔符是逗號 (,)
我需要不在逗號中的分隔符,因為我的數據集包含很多逗號。


謝謝
網站主持人對此評論進行了最小化
Ajouter Local:=True à cette ligne:
xObjWB.S​​aveAs 文件名:=xStrCSVFName,文件格式:=xlCSV,本地:=True

Permet de prendre le séparateur de votre système, moi c'est point-virgule ;
網站主持人對此評論進行了最小化
您好!

vor einem Jahr habe ich den VBA-Code ohne Probleme ausgeführt。 Heute wollte ich es nochmal versuchen, leider gibt es einen Laufzeitfehler 1004 mit dem Hinweis
“Die Methode 'Calculation' ist für Objekt '_Application' fehlgeschlagen。”

Debuggen verweit auf folgende Zeile:
Application.Calculation = xlCalculationManual

卡恩·傑曼德·韋特赫爾芬?

LG,馬克斯
網站主持人對此評論進行了最小化
您好!

ich habe den VBA-Code vor einem Jahr ohne Probleme angewendet。 Jetzt funktioniert es nicht mehr。
Es gibt einen Laufzeitfehler 1004 mit dem Hinweis:“Die Methode 'calculation' für das Objekt '_Application' ist fehlgeschlagen。”

Debuggen verweist auf die Zeile "Application.Calculation = xlCalculationManual"。

Ich würde mich sehr freuen, wenn jemand weiterhelfen könnte。

LG,馬克斯
網站主持人對此評論進行了最小化
嗨,Gast,請先檢查您複製的代碼是否正確,代碼中沒有“_”。 如果您已檢查所有代碼是否正確,則可以刪除代碼行
Application.Calculation = xlCalculationManual 然後再試一次。 請注意,代碼中有兩行 Application.Calculation = xlCalculationManual。
這裡還沒有評論
載入更多
留下你的意見
以訪客身份發帖
×
評價此帖子:
0   字符
推薦地點

關注我們

版權所有©2009 - 萬維網。extendoffice.com。 | 版權所有。 供電 ExtendOffice。 |
Microsoft和Office徽標是Microsoft Corporation在美國和/或其他國家的商標或註冊商標。
受Sectigo SSL保護