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应用程序 窗口,然后单击 插页 > 模块。 看截图:
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或工作簿。 Kutools for Excel 用扩展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底部
按评论排序
注释 (38)
还没有评分。 成为第一位评论!
该评论由网站上的主持人最小化
我想做相反的事情 - 将 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.关闭
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.关闭

' 删除旧的 CSV 文件

杀死旧名称

Windows(我的文件)。激活

工作文件 = 目录()

循环



Application.DisplayAlerts = True

Application.ScreenUpdating =真



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.保存

哈斯塔阿奎阿格雷格哟

ActiveWorkbook.关闭
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保护