有一个工具可以纠正 MS Excel 文件扩展名吗?

有一个工具可以纠正 MS Excel 文件扩展名吗?

我有几百个excel文件,文件名都是*.xls,但实际上有些是*.xls,有些是*.xlsx,有些是*.xlsb,有没有软件可以自动识别并纠正每个excel文件的扩展名?

答案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要用文件格式常量首先。验证它们是否正确,并添加缺失的部分。

相关内容