Muszę pracować ze starą aplikacją, która może eksportować tylko pliki XLS i piszę programy w .Net przy użyciu biblioteki EPPlus, która jest w stanie odczytywać tylko pliki XLSX.
Jaki jest najprostszy sposób na konwersję wsadową z XLS na XLSX?
Muszę pracować ze starą aplikacją, która może eksportować tylko pliki XLS i piszę programy w .Net przy użyciu biblioteki EPPlus, która jest w stanie odczytywać tylko pliki XLSX.
Jaki jest najprostszy sposób na konwersję wsadową z XLS na XLSX?
Odpowiedzi:
Sprawdź Menedżera planowania migracji pakietu Office.
Zestaw zawiera także konwerter plików Office (OFC), który umożliwia konwersję dokumentów zbiorczych z formatów binarnych na formaty OpenXML. ( Technet )
Pamiętaj, że będziesz również potrzebować Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint File FormatsOFC do działania.
Oba narzędzia tak naprawdę nie są już obsługiwane.
Polecam użycie makra do przetwarzania plików w folderze w celu konwersji ich z XLS na XLSX. Ten kod zakłada, że wszystkie pliki znajdują się w jednym folderze i że wszystkie pliki xls muszą zostać przekonwertowane, ale jeśli chcesz wybrać pojedyncze pliki, ten kod może zostać zaktualizowany.
Ten kod musiałby zostać uruchomiony ze skoroszytu programu Excel 2007 lub nowszego.
Option Explicit
' Convert all xls files in selected folder to xlsx
Public Sub convertXLStoXLSX()
Dim FSO As Scripting.FileSystemObject
Dim strConversionPath As String
Dim fFile As File
Dim fFolder As Folder
Dim wkbConvert As Workbook
' Open dialog and select folder
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.Show
On Error Resume Next ' Prevent debug mode if user cancels selection
strConversionPath = .SelectedItems(1)
On Error GoTo 0 ' Re-enable default error handling
End With
Set FSO = New Scripting.FileSystemObject
' Check if the folder exists
If FSO.FolderExists(strConversionPath) Then
Set fFolder = FSO.GetFolder(strConversionPath)
' Disable confirmation dialogs (to prevent "unsaved changes" dialog popping up)
' and screen updates (to speed up conversion)
Application.DisplayAlerts = False
Application.ScreenUpdating = False
' Loop through files, find the .xls files
For Each fFile In fFolder.Files
If LCase$(Right(fFile.Name, 4)) = ".xls" Then
' Open temporary workbook
Set wkbConvert = Workbooks.Open(fFile.Path)
' Save as OpenXML workbook - if your .xls files contain macros
' then change to FileFormat:=xlOpenXMLWorkbookMacroEnabled
wkbConvert.SaveAs FSO.BuildPath(fFile.ParentFolder, _
Left(fFile.Name, Len(fFile.Name) - 4)) & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook
wkbConvert.Close SaveChanges:=False
' Delete original file
fFile.Delete Force:=True
End If
Next fFile
' Re-enable confirmation dialogs and screen updates
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End If
End Sub
Uwaga: jeśli pliki, które konwertujesz, zawierają makra, musisz zaktualizować plik
FileFormat:=xlOpenXMLWorkbookdo odczytuFileFormat:=xlOpenXMLWorkbookMacroEnabled. Lub jeśli nie potrzebujesz kodu makr w przekonwertowanych plikach, możesz zostawić go w spokoju i usunie makra, gdy konwertuje go do formatu xlsx.
Napisałem więc prosty VBScript do cichej konwersji plików .xls na .xlsx.
./convert-xls-xlsx.vbs {ścieżka do folderu zawierającego pliki .xls}
convert-xls-xlsx.vbs:
Ustaw args = WScript.Arguments
strPath = args (0)
strPath = CreateObject ("Scripting.FileSystemObject"). GetAbsolutePathName (strPath)
Ustaw objExcel = CreateObject („Excel.Application”)
objExcel.Visible = False
objExcel.DisplayAlerts = False
Ustaw objFso = CreateObject ("Scripting.FileSystemObject")
Ustaw objFolder = objFso.GetFolder (strPath)
For Each objFile In objFolder.Files
nazwa_pliku = objFile.Path
Jeśli (objFso.GetExtensionName (objFile.Path) = "xls"), to
Ustaw objWorkbook = objExcel.Workbooks.Open (fileName)
saveFileName = Zamień (fileName, ". xls", ". xlsx")
objWorkbook.SaveAs saveFileName, 51
objWorkbook.Close ()
objExcel.Application.DisplayAlerts = True
End If
Kolejny
MsgBox „Zakończono konwersję”
UWAGA: Zwróć uwagę na spacje w ścieżce folderu, jeśli na ścieżce jest spacja między nimi, umieść ścieżkę w cudzysłowie.
Sub SaveAllAsXLSX ()
Dim strFilename As String
Dim strDocName As String
Dim strPath As String
Dim wbk jako skoroszyt
Dim fDialog As FileDialog
Dim intPos As Integer
Dim strPassword As String
Dim strWritePassword As String
Dim varA As String
Dim varB As String
Dim colFiles jako nowa kolekcja
Dim vFile As Variant
Ustaw fDialog = Application.FileDialog (msoFileDialogFolderPicker)
Z fDialog
.Title = "Wybierz folder i kliknij OK"
.AllowMultiSelect = True
.InitialView = msoFileDialogViewList
Jeśli .Pokaż -1 to
MsgBox „Anulowane przez użytkownika”, „Lista zawartości folderu”
Wyjdź z Sub
End If
strPath = fDialog.SelectedItems.Item (1)
Jeśli Right (strPath, 1) „\” Następnie strPath = strPath + „\”
Kończyć z
Jeśli lewy (strPath, 1) = Chr (34), to
strPath = Mid (strPath, 2, Len (strPath) - 2)
End If
Ustaw obj = CreateObject ("Scripting.FileSystemObject")
RecursiveDir colFiles, strPath, „* .xls”, True
Dla każdego pliku vFile w colFiles
Debug.Print vFile
strFilename = vFile
varA = Right (strFilename, 3)
Jeśli (varA = „xls” lub varA = „XLSX”), to
Ustaw wbk = skoroszyty. Otwórz (Nazwa pliku: = strFilename)
Jeśli wbk.HasVBProject Then
wbk.SaveAs Nazwa pliku: = strFilename & "m", FileFormat: = xlOpenXMLWorkbookMacroEnabled
Jeszcze
wbk.SaveAs Nazwa pliku: = strFilename & "x", FileFormat: = xlOpenXMLWorkbook
End If
wbk.Close SaveChanges: = False
obj.DeleteFile (strFilename)
End If
Następny plik v
Napis końcowy
Public Function RecursiveDir (colFiles As Collection, _
strFolder As String, _
strFileSpec As String, _
bIncludeSubfolders As Boolean)
Dim strTemp As String
Dim colFolders jako nowa kolekcja
Dim vFolderName jako wariant
„Dodaj pliki w strFolder pasujące do strFileSpec do colFiles
strFolder = TrailingSlash (strFolder)
strTemp = Dir (strFolder i strFileSpec)
Do While strTemp vbNullString
colFiles.Add strFolder & strTemp
strTemp = reż
Pętla
Jeśli bIncludeSubfolders to
„Wypełnij colFolders listą podkatalogów strFolder
strTemp = Dir (strFolder, vbDirectory)
Do While strTemp vbNullString
Jeśli (strTemp „.”) I (strTemp „..”) To
Jeśli (GetAttr (strFolder & strTemp) i vbDirectory) 0 to
colFolders.Add strTemp
End If
End If
strTemp = reż
Pętla
„Call RecursiveDir dla każdego podfolderu w colFolderach
For Each vFolderName In colFolders
Call RecursiveDir (colFiles, strFolder & vFolderName, strFileSpec, True)
Następny vFolderName
End If
Funkcja zakończenia
Funkcja publiczna TrailingSlash (strFolder As String) As String
Jeśli Len (strFolder)> 0 to
Jeśli Right (strFolder, 1) = "\" To
TrailingSlash = strFolder
Jeszcze
TrailingSlash = strFolder i „\”
End If
End If
Funkcja zakończenia
Jeśli masz zainstalowany MsOffice, to narzędzie może być warte pobrania w celu szybkiej naprawy.
http://www.softinterface.com/Convert-XLS/Features/Convert-XLS-To-XLSX.htm
Po wybraniu folderu, w którym chcesz przekonwertować pliki xls, zaznacz opcję narzędzia do konwersji używającego MS Office do konwersji, a nie własnego konwertera.
Jeśli użyjesz własnego konwertera, stracisz kolory w komórkach i wydaje się, że wychodzi pojedynczy arkusz. Jeśli używasz MsOffice, ponieważ konwerter wydaje się działać dobrze. Dobre narzędzie do szybkiej naprawy.