У меня есть сотни файлов Excel, которые все названы * .xls. Но на самом деле некоторые из них * .xls, некоторые * .xlsx, а некоторые * .xlsb. Существует ли программное обеспечение для автоматического распознавания и исправления расширения каждого файла Excel?

1 ответ1

1

Я думаю, что открытие рассматриваемого файла в Excel и исследование свойства FileFormat рабочей книги с помощью VBA должно помочь. Это должно работать, потому что Excel автоматически определяет тип файла правильно, когда вы открываете его.

Так как у вас много файлов, я бы порекомендовал программу VBA зациклить все файлы (лучше всего поместить их в одну папку). Затем откройте их один за другим, проверьте FileFormat , сохраните результат где-нибудь и снова закройте файл.

Вы также можете переименовать файлы в цикле в зависимости от их формата.

Вы можете использовать такой код:

Option Explicit

Public Sub TestExcelFileFormats(ByVal strPath As String, Optional ByVal boolTestOnly As Boolean = True)
    Dim fso As New Scripting.FileSystemObject
    Dim fileExcel As Scripting.File
    Dim wbkOutput As Workbook
    Dim shtOutput As Worksheet
    Dim wbkTestFile As Workbook
    Dim i As Long
    Dim strCorrectExtension As String

    Set wbkOutput = Workbooks.Add
    Set shtOutput = wbkOutput.Sheets(1)
    shtOutput.Name = "Output"
    shtOutput.Cells(1, 1) = "Filename"
    shtOutput.Cells(1, 2) = "Old Extension"
    shtOutput.Cells(1, 3) = "File Format"
    shtOutput.Cells(1, 4) = "New Extension"

    i = 2
    For Each fileExcel In fso.GetFolder(strPath).Files
        Set wbkTestFile = Nothing
        On Error Resume Next
            Set wbkTestFile = Workbooks.Open(fileExcel.Path)
        On Error GoTo 0
        If Not wbkTestFile Is Nothing Then
            shtOutput.Cells(i, 1) = fileExcel.Path
            shtOutput.Cells(i, 2) = fso.GetExtensionName(fileExcel.Name)
            shtOutput.Cells(i, 3) = wbkTestFile.FileFormat
            Select Case wbkTestFile.FileFormat
                Case xlOpenXMLWorkbook:
                    strCorrectExtension = "xlsx"
                Case xlOpenXMLWorkbookMacroEnabled:
                    strCorrectExtension = "xlsm"
                Case xlExcel3, xlExcel4, xlExcel5:
                    strCorrectExtension = "xls"
                Case xlExcel12:
                    strCorrectExtension = "xlsb"
                Case Else:
                    ' unknown file format - you probably want to add it to one of the above cases
                    strCorrectExtension = fso.GetExtensionName(fileExcel.Name)
            End Select
            wbkTestFile.Close False
            If strCorrectExtension <> fso.GetExtensionName(fileExcel.Name) Then
                If Not boolTestOnly Then fso.MoveFile fileExcel.Path, fso.BuildPath(fileExcel.ParentFolder, fso.GetBaseName(fileExcel.Name) & "." & strCorrectExtension)
                shtOutput.Cells(i, 4) = strCorrectExtension
            End If
            i = i + 1
        End If
    Next fileExcel

    wbkOutput.Activate
End Sub

Перед тем как выполнить какое-либо реальное переименование, вызовите эту процедуру со вторым параметром, установленным в True (по умолчанию). Это будет просто выходной список того , что программа would делать , если вы установите второй параметр в значение False

И вы должны обязательно проверить Case с константами формата файла в первую очередь. Убедитесь, что они верны, и добавьте те, которые отсутствуют.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .