如何从.txt文件转换为.xlsx?

时间:2020-04-30 20:32:33

标签: excel vba

我正在尝试将200多个.txt文件转换为.xlsx文件。这是我正在使用的代码:

Dim wb As Excel.Workbook
Dim FSO As New FileSystemObject
Dim obj_folder As Object
Dim file As Object
Dim path As String
Dim destination As String
Dim file_name As String

path = "C:\Users\ABCD\Desktop\Attributes Files\"
destination = "C:\Users\ABCD\Desktop\Attributes xlx\"
Set FSO = CreateObject("Scripting.filesystemobject")
Set obj_folder = FSO.GetFolder(path)

For Each file In obj_folder.Files
    file_name = Left(file.Name, (InStrRev(file.Name, ".", -1, vbTextCompare) - 1))
    Call Workbooks.OpenText(Filename:=file, DataType:=xlDelimited, Tab:=True)
    Set wb = ActiveWorkbook
    wb.SaveAs Filename:=destination & file_name & ".xlsx"
    wb.Close savechanges:=False
Next file

当代码运行完毕并打开.xlsx工作簿时,我收到一条错误消息,指出Excel无法打开文件,因为文件格式或文件扩展名无效。确认文件未损坏,并且文件扩展名与文件格式匹配。

我不确定该怎么做,因为我知道当我手动将一个.txt文件工作簿更改为.xlsx文件类型时,此方法有效。我什至记录了该宏,并且该宏或多或少与我在这里的代码相匹配。 (在一次尝试中,我什至精确地复制了录制的宏,并且仍然无法在完成后打开.xlsx文件。)任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您永远不会引用保存的文件格式。您要使用xlOpenXMLWorkbook = 51

似乎您将目标文件传递给了open的Filename参数。我将像构建输出名称时一样使用file.Name

使用With块将为您正常处理工作簿对象。 FSO.GetBaseName将为您删除文件名的扩展名。

Dim FSO As New FileSystemObject
Set FSO = CreateObject("Scripting.filesystemobject")

Dim path As String
path = "C:\Users\ABCD\Desktop\Attributes Files\"
Dim destination As String
destination = "C:\Users\ABCD\Desktop\Attributes xlx\"

Dim file As Object
For Each file In FSO.GetFolder(path).Files
    Dim file_name As String
    file_name = FSO.GetBaseName(file.Name)
    With Workbooks.OpenText(Filename:=file.Name, DataType:=xlDelimited, Tab:=True)
        .SaveAs Filename:=destination & file_name & ".xlsx", FileFormat:=51 
        .Close savechanges:=False
    End With
Next file