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

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

通過應用另存為功能,將CSV文件轉換為Xls或XLSX文件非常容易。 但是,將一個文件夾中的多個CSV文件轉換為XLS或XLSX文件非常耗時,因為它們是手動保存的。 在這裡,我介紹了一個宏代碼,用於快速將所有CSV文件從文件夾批量轉換為XLS(x)文件。

使用宏代碼將CSV文件批量轉換為XlS(X)文件


使用宏代碼將CSV文件批量轉換為XlS(X)文件

要將多個CSV文件從一個文件夾轉換為XLS(X)文件,可以執行以下步驟:

1.啟用一個新的工作簿,按 Alt + F11鍵 打開鑰匙 Microsoft Visual Basic for Applications 窗口,然後單擊 插入 > 模塊。 看截圖:
doc批量轉換cvs xls 1

備註:確保要轉換的所有CSV文件都已關閉。

2.然後將下面的宏代碼粘貼到 模塊 腳本,然後按 F5 鍵來運行代碼。

VBA:將CSV轉換為XLS

Sub CSVtoXLS()
'UpdatebyExtendoffice20170814
    Dim xFd As FileDialog
    Dim xSPath As String
    Dim xCSVFile As String
    Dim xWsheet As String
    Application.DisplayAlerts = False
    Application.StatusBar = True
    xWsheet = ActiveWorkbook.Name
    Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
    xFd.Title = "Select a folder:"
    If xFd.Show = -1 Then
        xSPath = xFd.SelectedItems(1)
    Else
        Exit Sub
    End If
    If Right(xSPath, 1) <> "\" Then xSPath = xSPath + "\"
    xCSVFile = Dir(xSPath & "*.csv")
    Do While xCSVFile <> ""
        Application.StatusBar = "Converting: " & xCSVFile
        Workbooks.Open Filename:=xSPath & xCSVFile
        ActiveWorkbook.SaveAs Replace(xSPath & xCSVFile, ".csv", ".xls", vbTextCompare), xlNormal
        ActiveWorkbook.Close
        Windows(xWsheet).Activate
        xCSVFile = Dir
    Loop
    Application.StatusBar = False
    Application.DisplayAlerts = True
End Sub

3.在彈出對話框中,選擇包含要轉換的CSV文件的指定文件夾。 看截圖:
doc批量轉換cvs xls 2

4。 點擊 OK,所選文件夾中的所有CSV文件都已轉換為其中的XLS文件。
doc批量轉換cvs xls 3

尖端:如果要將CSV文件轉換為XLSX文件,請使用以下VBA代碼。

VBA:將CSV文件轉換為XLSX

Sub CSVtoXLS()
'UpdatebyExtendoffice20170814
    Dim xFd As FileDialog
    Dim xSPath As String
    Dim xCSVFile As String
    Dim xWsheet As String
    Application.DisplayAlerts = False
    Application.StatusBar = True
    xWsheet = ActiveWorkbook.Name
    Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
    xFd.Title = "Select a folder:"
    If xFd.Show = -1 Then
        xSPath = xFd.SelectedItems(1)
    Else
        Exit Sub
    End If
    If Right(xSPath, 1) <> "\" Then xSPath = xSPath + "\"
    xCSVFile = Dir(xSPath & "*.csv")
    Do While xCSVFile <> ""
        Application.StatusBar = "Converting: " & xCSVFile
        Workbooks.Open Filename:=xSPath & xCSVFile
        ActiveWorkbook.SaveAs Replace(xSPath & xCSVFile, ".csv", ".xlsx", vbTextCompare), xlWorkbookDefault
        ActiveWorkbook.Close
        Windows(xWsheet).Activate
        xCSVFile = Dir
    Loop
    Application.StatusBar = False
    Application.DisplayAlerts = True
End Sub

一次即可快速轉換或導出一定範圍的圖紙以分離XLS / Word / PDF或其他格式的文件

通常,Excel不支持您選擇快速將範圍導出或保存為CSV或Excel文件的選項。 如果要在Excel中將數據范圍另存為CSV或工作簿,則可能需要使用VBA宏來執行此操作,或將範圍複製到剪貼板並將其粘貼到新工作簿中,然後將工作簿另存為CSV或工作簿。 Excel的Kutools 用擴展Excel 將範圍導出到文件 想要快速處理以下操作的Excel用戶的實用程序:  點擊查看 30-day 全功能免費試用!
doc將單元格範圍導出到文件
 
Kutools for Excel:擁有超過 300 個方便的 Excel 加載項,免費試用,不受限制 30 天。

相關文章:


最佳辦公效率工具

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底部
按評論排序
留言 (37)
還沒有評分。 成為第一位評論!
網站主持人對此評論進行了最小化
我想做相反的事情 - 將 XLS 轉換為 CSV。 這個腳本有效嗎?
子 CSVtoXLS()
'更新通過Extendoffice20170814
將 xFd 調暗為 FileDialog
將 xSPath 調暗為字符串
將 xXLSFile 調暗為字符串
將 xWsheet 調暗為字符串
Application.DisplayAlerts = False
Application.StatusBar = True
xWsheet = ActiveWorkbook.Name
設置 xFd = Application.FileDialog(msoFileDialogFolderPicker)
xFd.Title = "選擇一個文件夾:"
如果 xFd.Show = -1 那麼
xSPath = xFd.SelectedItems(1)
其他
退出小組
如果結束
如果 Right(xSPath, 1) <> "\" 那麼 xSPath = xSPath + "\"
xXLSFile = Dir(xSPath & "*.xls")
當 xXLSFile <> ""
Application.StatusBar = "正在轉換:" & xXLSFile
Workbooks.Open 文件名:=xSPath & xXLSFile
ActiveWorkbook.SaveAs Replace(xSPath & xXLSFile, ".xls", ".csv", vbTextCompare), xlNormal
ActiveWorkbook.Close
Windows(xWsheet).激活
xXLSFile = 目錄
循環
Application.StatusBar = False
Application.DisplayAlerts = True
END SUB
網站主持人對此評論進行了最小化
子轉換CSVToXlsx()



將 myfile 調暗為字符串

將 oldfname 作為字符串調暗,將 newfname 作為字符串調暗

昏暗的工作文件

將文件夾名稱變暗為字符串



Application.DisplayAlerts = False

Application.ScreenUpdating = False



' 捕獲當前文件的名稱

myfile = ActiveWorkbook.Name



' 設置文件夾名稱以通過

文件夾名稱 = "D:\tmp\"



' 遍歷文件夾中的所有 CSV 文件

工作文件 = 目錄(文件夾名和“*.CSV”)

Do While 工作文件 <> ""

' 打開 CSV 文件

Workbooks.Open Filename:=folderName & workfile

' 捕獲舊 CSV 文件的名稱

oldfname = ActiveWorkbook.FullName

' 轉換為 XLSX

newfname = folderName & Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & ".xlsx"

ActiveWorkbook.SaveAs 文件名:=newfname, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=True

ActiveWorkbook.Close

' 刪除舊的 CSV 文件

殺死舊名稱

Windows(我的文件)。激活

工作文件 = 目錄()

循環



Application.DisplayAlerts = True

Application.ScreenUpdating = True



END SUB
網站主持人對此評論進行了最小化
“提示:如果要將 CSV 文件轉換為 XLXS 文件,只需將宏 ActiveWorkbook.SaveAs Replace(xSPath & xCSVFile, ".csv", ".xls", vbTextCompare) 中的 .xls 更改為 .xlsx 即可。"

我試過了,Excel 無法打開生成的文件。 我收到以下消息:“Excel 無法打開文件 'filename.xlsx',因為文件格式或文件擴展名無效。驗證文件沒有損壞,並且文件擴展名與文件格式匹配。”

但是,該腳本已成功轉換為 .xls。
網站主持人對此評論進行了最小化
我之前沒有發現這個問題,謝謝你的正確評論。 我已經更正了提示。
網站主持人對此評論進行了最小化

網站主持人對此評論進行了最小化
非常感謝您將 CSV 轉換為 XLS 的出色腳本。 它對我的工作更有用
網站主持人對此評論進行了最小化
嗨,

您的腳本很棒,但它不會轉換用分號分隔的 csv。 你能發布一個解決方案嗎?

謝謝
網站主持人對此評論進行了最小化
對不起,這裡我沒有任何解決方案,也許你可以把你的問題放到我們的論壇,別人可以幫助你。 https://www.extendoffice.com/forum.html
網站主持人對此評論進行了最小化
我可能遲到了,我剛遇到需要轉換分號 CSV 文件的問題,我將其添加到代碼中,它工作希望這對某人有所幫助

更改 'Workbooks.Open Filename:=xSPath & xCSVFile' 通過此 'Workbooks.Open Filename:=xSPath & xCSVFile, Delimiter:=";", Local:=True'
網站主持人對此評論進行了最小化
我使用文件多個 csv 到多個 xls 但得到錯誤的 xls de csv 文件; 分離的信息,但在細胞中結合在一起。 如何解決?
網站主持人對此評論進行了最小化
該代碼不支持分隔的逗號 csv 文件。
網站主持人對此評論進行了最小化
當我給出文件夾名稱時,程序說:“沒有文件符合您的搜索。” 但文件夾中有 2,609 個 .csv 文件
網站主持人對此評論進行了最小化
該代碼不支持分隔的逗號 csv 文件,您的文件是否屬於這種情況?
網站主持人對此評論進行了最小化
你好,

一篇很棒的文章-謝謝! 幾乎對我有用。

問題是:我有一個以豎線分隔的 csv 文件。 我已將默認窗口分隔符(通過控制面板/區域設置)更改為“|”。 因此,當我使用 Excel 打開 csv 文件時,它會打開、直接讀取字段並將其正確解析為列。 我所要做的就是保存為 xls 或 xlsx,完成。 當我查看您的代碼時,這應該是代碼的作用:它打開文件夾中的 csv 文件,將它們保存為 xls 或 xlsx,然後循環播放。

這就是問題所在:當我打開這些 Excel 文件時,管道分隔符仍然存在,沒有任何內容被解析​​到列中。 這是我在 Windows 設置中更改管道分隔的默認設置之前的行為。 因此,Excel 似乎不使用這些 Windows 設置。 我通過在文件副本中用逗號分隔符替換管道分隔符來驗證這一點 - 在兩個文件中,管道分隔符仍未解析,逗號分隔符被轉換得很好。

知道在哪裡可以找到或更改 Excel 內置的逗號分隔符,或者代碼中是否有辦法做到這一點? 我寧願不必進行搜索和替換,然後保存...

謝謝,慧聰
網站主持人對此評論進行了最小化
如果要在 Excel 中根據管道分隔符將數據拆分為列,只需將 csv 文件轉換為 xls 後,使用 Text to Columns 功能按 / 拆分數據。
網站主持人對此評論進行了最小化
並沒有真正使代碼對 excel 文件有用。
網站主持人對此評論進行了最小化
嗨,很棒的腳本,在嘗試了谷歌提供的所有其他腳本後對我有用。 我已經添加了幾行來執行我想要的文本到列操作。 任何人都可以通過在本地驅動器中指定文件夾位置而不是打開對話框來幫助我如何修改腳本,因為我實際上是在自動化系統
。 提前致謝
網站主持人對此評論進行了最小化
Hi
你能分享執行文本到列的腳本嗎?
最好的問候
網站主持人對此評論進行了最小化
搜索谷歌中可用的所有其他腳本後的偉大腳本。 任何人都可以通過在本地驅動器中指定文件夾位置來幫助如何修改此腳本,而不是允許它打開對話框,因為我實際上是在自動化系統。 提前致謝
網站主持人對此評論進行了最小化
很酷的代碼。 很有用。 如果我沒記錯的話,.xlsx 的代碼看起來與 .xls 代碼相同。

這一行:
ActiveWorkbook.SaveAs Replace(xSPath & xCSVFile, ".csv", ".xls", vbTextCompare), xlWorkbookDefault

我認為它應該是:“.csv”、“.xlsx”、vbTextCompare 等。
網站主持人對此評論進行了最小化
如上所述,我已經更改了代碼; 現在腳本按預期工作:它生成 xlsx 文件
網站主持人對此評論進行了最小化
不,你沒有。 它仍然在兩個版本中都顯示 xls。
網站主持人對此評論進行了最小化
這個宏不顯示我的 csv 文件
網站主持人對此評論進行了最小化
此代碼的一個小問題是,在打開 csv 並將其保存為 xlsx 時,可能會丟失一些準確性(小數位數)。
防止這種情況的方法是在打開後立即選擇所有單元格,將小數位數設置為所需的數量(我個人為 15),然後*然後*保存為 xlsx

否則,與原始 csv 相比,xlsx 的細節更少(小數精度更低),這可能會導致某些應用程序出現問題
網站主持人對此評論進行了最小化
它將我的日期列格式從 dd-mm-yyyy 更改為 dd/mm/yyyy,請任何人幫助如何防止此腳本更改列格式。
非常感謝。
網站主持人對此評論進行了最小化
嗨,毒蛇,轉換後,您可以將它們格式化回來,選擇日期並右鍵單擊以從上下文菜單中選擇格式化單元格,在“格式化單元格”對話框中,在“數字”選項卡下,單擊“類別”列表中的“自定義”,然後鍵入 mm-dd- yyyy 進入右側部分的文本框。 或者,如果您有 Kutools for Excel,請應用應用日期格式根據需要更改日期格式。
網站主持人對此評論進行了最小化
很棒的文章。 如何將所有轉換後的文件保存在新位置? 能否請您更新代碼並將其發送給我。 就像允許用戶選擇他的目標文件夾一樣。


謝謝
網站主持人對此評論進行了最小化
您在 csv 到 xlsx 的第 22 行有錯誤
出現錯誤 - ActiveWorkbook.SaveAs Replace(xSPath & xCSVFile, ".csv", ".xls", vbTextCompare), xlWorkbookDefault
已更正 - ActiveWorkbook.SaveAs Replace(xSPath & xCSVFile, ".csv", ".xslx", vbTextCompare), xlWorkbookDefault
網站主持人對此評論進行了最小化
謝謝提醒,我已經更新了,再次感謝。
網站主持人對此評論進行了最小化
我收到此行的錯誤“對像變量或未設置塊變量”:
xFd.Title = "/Users/[my.name]/Documents/[myFolder]" >> 這是我計算機上正在進行轉換的特定文件夾的路徑(該文件夾裡面有一堆 csv 文件)

我在這裡做錯了什麼?
網站主持人對此評論進行了最小化
這對我有用,但文件擴展名沒有改變。 有小費嗎?
網站主持人對此評論進行了最小化
我也一樣——所有文件都保留為 .csv。
網站主持人對此評論進行了最小化
您選擇的所有 csv 文件都已保存為新的 excel 文件,原始文件 (csv) 不會更改,存在具有相同內容的新 excel 文件。
網站主持人對此評論進行了最小化
我有同樣的問題。 如果您的源文件有大寫字母 (.CSV) 的擴展名,則它不起作用。 只需將第 22 行代碼中的 .csv 替換為 .CSV 即可。 好吧,至少對我來說是這樣。
網站主持人對此評論進行了最小化
我如何將代碼合併到 XLSX 批處理文件例程中,以分號將數據分隔到單獨的列中? 共享代碼將文件從 .csv 轉換為 .xlsx,但它不會將數據分成單獨的列。
網站主持人對此評論進行了最小化
是的,這是行不通的。
網站主持人對此評論進行了最小化
早上好同伴

Adiciona a lo que hace el script, quisiera poder convertir inmediatamente el texto en columnas, por la opción que no es delimitado por ningún tipo de caracter, adicional los tamaños de las columnas son diferentes。 Vale la pena aclarar que si tomo cada archivo por separado y le aplico la opción de texto en columnas, bajo esa opción los puedo convertir sin problemas, abriéndolos uno por uno, pero si grabo esa macro y le aplico la misma macro a todos, inclusive usando la opción de "USAR REFERENCIAS RELATIVAS", no hace el proceso bien, porque el graba las posiciones de la delimitación del archivo que uso de ejemlo, pero necesito que lo aplique nuevo a cada archivo, es decir, como si abriera cada archivo nuevo y le hiciera manualmente la opción delimitación y no aplique los valores de ubicación de las columnas identificados en el archivo ejemlo。

Ya inserte esa opcion en este archivo, sin embargo pasa lo que indico en la lineas arriba, solo requiero saber como puedo hacer para aplicar la conversion a cada archivo, aplicando la delimitacion del campo como su fuera un archivo nuevo。


Workbooks.Open 文件名:=xSPath & xCSVFile
ActiveWorkbook.SaveAs Replace(xSPath & xCSVFile, ".csv", ".xlsx", vbTextCompare), xlWorkbookDefault

ESTA PARTE ES LA QUE AGREGUE APLICANDO EL FORMATO DEL TEXTO A 專欄

StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(18 _
, 1), 數組(38, 1)), TrailingMinusNumbers:=True
ActiveCell.Cells.Select
ActiveCell.Cells.EntireColumn.AutoFit
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveWorkbook.Save

哈斯塔阿奎阿格雷格喲

ActiveWorkbook.Close
Windows(xWsheet).激活
xCSVFile = 目錄

循環
Application.StatusBar = False
Application.DisplayAlerts = True
END SUB

No se si me hago explicar bien, pero es mi problema。
這裡還沒有評論
留下你的意見
以訪客身份發帖
×
評價此帖子:
0   字符
推薦地點

關注我們

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