啊,本智障终于有机会输出有价值的答案了。最近我遇到了和题主类似的问题,即需要将一批.csv文件转换为.xlsx文件。但本智障一开始用的是最简单的办法,即将一个个.csv文件打开后再另存为.xlsx文件,但随着文件数的增多,实在是受不了这种重复操作了,于是今天上网看看能否利用编程之类的方法解决该问题,下面开始正文。
本智障找到的第一个比较成功的方法如下,链接:https://jingyan.baidu.com/article/6b97984deabfbc1ca2b0bfee.htmljingyan.baidu.com
使用的是Excel的宏功能,使用前需要把.csv文件先整理到一个文件夹中,宏中的代码如下:
ChDir "C:UsersAdministratorDesktop新建文件夹"
Dim sDir As String
Dim curdir As String
curdir = "C:UsersAdministratorDesktop新建文件夹"
sDir = Dir(curdir & "*.csv")
While Len(sDir)
Workbooks.Open Filename:=curdir & "" & sDir
Dim temp As String
temp = Left(sDir, Len(sDir) - 4)
ActiveWorkbook.SaveAs Filename:=curdir & "" & temp & ".xls", _
FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
ActiveWorkbook.Close
sDir = Dir
Wend
通过在文件中新建Excel表,再将该代码复制到Excel的宏中,即可成功地文件夹中的.csv文件转换为.xls文件,其实到这一步对于本智障已经基本够用了。但本智障的理想目标还是想将.csv文件全部转换为.xlsx格式,于是本智障自作聪明的将上述代码中
ActiveWorkbook.SaveAs Filename:=curdir & "" & temp & ".xls", _ 中的.xls换为了.xlsx。粘贴到宏中发现,居然可以运行!文件夹中也出现了相应的.xlsx文件。但当我兴致勃勃地点开文件时,却弹出“本文件已损环或格式不匹配”的提示,并且文件中是空白的一片。本智障十分气馁并打算放弃时,却发现了ZH-ST的答案,十分高兴如何快速批量将csv转换成excel文件?www.zhihu.com
然而,当我按答主的答案粘贴到宏中运行时,却发现无法运行,但看ZH-ST答主对自己的答案十分有信心,我还是相信他的答案是大体正确的。于是我将ZH-ST答主的代码与百度经验中的代码进行对比,寻找问题,后发现两段代码中都有这样一段
ActiveWorkbook.SaveAs Filename:=curdir & "" & temp & ".xls", _
FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
ActiveWorkbook.Close
sDir = Dir
ActiveWorkbook.SaveAs Filename:=curdir & "" & temp & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
ActiveWorkbook.Close
sDir = Dir
本智障认为这应该是与文件保存有关的操作,仔细对比后,恍然大悟,原来本智障将第一段代码中的.xls换为.xlsx还是不够的。还应该选择保存文件的格式,第一段代码中的FileFormat:=xlExcel8中的xlExcel8应该是.xls文件格式的对应代码。而我若要保存为.xlsx格式,则还应将xlExcel8替换成.xlsx格式对应的文件代码,通过ZH-ST答主的答案,我猜测.xlsx格式的文件代码应为xlOpenXMLWorkbook。于是我将百度经验中的代码重新修正为
ChDir "C:UsersAdministratorDesktop新建文件夹"
Dim sDir As String
Dim curdir As String
curdir = "C:UsersAdministratorDesktop新建文件夹"
sDir = Dir(curdir & "*.csv")
While Len(sDir)
Workbooks.Open Filename:=curdir & "" & sDir
Dim temp As String
temp = Left(sDir, Len(sDir) - 4)
ActiveWorkbook.SaveAs Filename:=curdir & "" & temp & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
ActiveWorkbook.Close
sDir = Dir
Wend
上面代码第一行和第四行的C:UsersAdministratorDesktop新建文件夹指的是你想批量转换的Excel文件所在的文件夹路径,根据自己的实际情况自行替换。
再粘贴到Excel中的宏中运行,成功的将所有.csv文件转换为.xlsx格式,并可以正常打开,不再提示文件损坏。虽然回头再看这是个很不值一提的问题,但本智障之前从没有用过Excel的宏,所以通过自己摸索解决这个问题,本智障还是挺高兴的。