Uma ferramenta para corrigir a extensão dos arquivos do MS Excel? [fechadas]

0

Eu tenho centenas de arquivos do excel, todos nomeados como * .xls. Mas, na verdade, alguns deles são * .xls, alguns são * .xlsx e alguns são * .xlsb. Existe um software para reconhecer e corrigir automaticamente a extensão de cada arquivo do Excel?

    
por Jfly 11.05.2016 / 15:40

1 resposta

1

Acho que abrir o arquivo em questão no Excel e investigar a propriedade FileFormat da pasta de trabalho com o VBA deve resolver o problema. Isso deve funcionar porque o Excel detecta automaticamente o tipo de arquivo corretamente quando você o abre.

Como você tem muitos arquivos, eu recomendaria um programa VBA para fazer o loop de todos os arquivos (é melhor colocá-los todos em uma pasta). Em seguida, abra-os um após o outro, verifique o FileFormat , salve o resultado em algum lugar e feche o arquivo novamente.

Você também pode renomear os arquivos no loop, dependendo do formato do arquivo.

Você poderia usar um código como este:

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

Antes de fazer uma renomeação real, chame este procedimento com o segundo parâmetro definido como True (o padrão). Isso apenas exibirá uma lista do que o programa would fará se você definir o segundo parâmetro como False .

E você deve definitivamente verificar as Case es com as constantes de formato de arquivo primeiro. Verifique se estão corretas e adicione as que estão faltando.

    
por 11.05.2016 / 20:56