Как я могу конвертировать из файла .txt в .xlsx? - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь преобразовать чуть более 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

Когда код закончен, и я go, чтобы открыть книгу .xlsx, я получаю сообщение об ошибке, в котором говорится, что Excel не может открыть файл, потому что файл неверный формат или расширение файла. Убедитесь, что файл не был поврежден и что расширение файла соответствует формату файла.

Я не уверен, что делать здесь, поскольку я знаю, что это работает, когда я вручную изменяю одну книгу .txt файла на тип файла .xlsx. Я даже записал макрос, и он более или менее совпадает с моим кодом, который у меня есть. (с одной попытки я даже точно скопировал записанный макрос, и он все равно не позволил бы мне открыть файл .xlsx после его завершения.) Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 01 мая 2020

Вы никогда не цитируете, в каком формате вы сохраняете файл. Вы хотите использовать xlOpenXMLWorkbook = 51

Похоже, что вы передаете объектный файл в параметр имени файла open. Я бы использовал 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...