У меня есть сотни файлов 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
с константами формата файла в первую очередь. Убедитесь, что они верны, и добавьте те, которые отсутствуют.