Risposte:
Dai un'occhiata a Office Migration Planning Manager.
Il toolkit contiene anche Office File Converter (OFC), che consente conversioni di documenti in blocco dai formati binari a OpenXML. ( Technet )
Si noti che avrete anche bisogno del Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint File Formats
per l'OFC al lavoro.
Entrambi gli strumenti non sembrano più essere supportati.
Consiglio di utilizzare una macro per elaborare i file all'interno di una cartella per convertirli da xls a xlsx. Questo codice presuppone che i file si trovino tutti all'interno di una cartella e che tutti i file xls debbano essere convertiti, ma se si desidera selezionare singoli file questo codice potrebbe essere aggiornato.
Questo codice dovrebbe essere eseguito da una cartella di lavoro di Excel 2007 o superiore.
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
Nota: se i file che si stanno convertendo contengono macro, è necessario aggiornare il file
FileFormat:=xlOpenXMLWorkbook
da leggereFileFormat:=xlOpenXMLWorkbookMacroEnabled
. O se non hai bisogno del codice macro nei file convertiti, potresti lasciarlo solo e rimuoverà le macro quando lo converte nel formato xlsx.
Sottotitoli: AllAsXLSX () Dim strFilename As String Dim strDocName As String Dim strPath come stringa Dim wbk As Workbook Dim fDialog Come FileDialog Dim intPos come numero intero Dim strPassword As String Dim strWritePassword As String Dim varA As String Dim varB As String Dim colFiles come nuova collezione Dim vFile As Variant Imposta fDialog = Application.FileDialog (msoFileDialogFolderPicker) Con fDialog .Title = "Seleziona la cartella e fai clic su OK" .AllowMultiSelect = True .InitialView = msoFileDialogViewList Se .Mostra -1 Quindi MsgBox "Annullato dall'utente", "Elenco contenuto cartella" Esci da Sub Finisci se strPath = fDialog.SelectedItems.Item (1) If Right (strPath, 1) "\" Quindi strPath = strPath + "\" Termina con If Left (strPath, 1) = Chr (34) Quindi strPath = Mid (strPath, 2, Len (strPath) - 2) Finisci se Set obj = CreateObject ("Scripting.FileSystemObject") RecursiveDir colFiles, strPath, "* .xls", True Per ogni vFile in colFiles Debug.Print vFile strFilename = vFile varA = Right (strFilename, 3) If (varA = "xls" O varA = "XLSX") Quindi Imposta wbk = Workbooks.Open (Nome file: = strFilename) Se wbk.HasVBProject Quindi wbk.SaveAs Nome file: = strFilename & "m", FileFormat: = xlOpenXMLWorkbookMacroEnabled Altro wbk.SaveAs Nome file: = strFilename & "x", FileFormat: = xlOpenXMLWorkbook Finisci se wbk.Close SaveChanges: = False obj.DeleteFile (strFilename) Finisci se File successivo End Sub Funzione pubblica RecursiveDir (colFiles As Collection, _ strFolder As String, _ strFileSpec As String, _ bIncludeSubfolders As Boolean) Dim strTemp As String Dim colFolders come nuova collezione Dim vFolderName Come variante 'Aggiungi file in strFolder corrispondenti a strFileSpec a colFiles strFolder = TrailingSlash (strFolder) strTemp = Dir (strFolder & strFileSpec) Do While strTemp vbNullString colFiles.Add strFolder & strTemp strTemp = Dir Ciclo continuo Se bIncludeSubfolders Quindi 'Riempi colFolders con l'elenco delle sottodirectory di strFolder strTemp = Dir (strFolder, vbDirectory) Do While strTemp vbNullString If (strTemp ".") And (strTemp "..") Quindi If (GetAttr (strFolder & strTemp) E vbDirectory) 0 Quindi colFolders.Add strTemp Finisci se Finisci se strTemp = Dir Ciclo continuo 'Chiama RecursiveDir per ogni sottocartella in colFolders Per ogni vFolderName In colFolders Call RecursiveDir (colFiles, strFolder & vFolderName, strFileSpec, True) VFolderName successivo Finisci se Fine funzione Funzione pubblica TrailingSlash (strFolder As String) As String Se Len (strFolder)> 0 Quindi If Right (strFolder, 1) = "\" Quindi TrailingSlash = strFolder Altro TrailingSlash = strFolder & "\" Finisci se Finisci se Fine funzione
Se hai installato MsOffice, questo strumento potrebbe valere la pena di essere scaricato per una soluzione rapida.
http://www.softinterface.com/Convert-XLS/Features/Convert-XLS-To-XLSX.htm
Quando selezioni una cartella per vedere i file xls convertiti, assicurati di spuntare l'opzione di strumento di conversione che utilizza MS Office per la conversione, non il proprio convertitore.
Se si utilizza il proprio convertitore, si perderanno i colori nelle celle e il singolo foglio sembra uscire. Se usi MsOffice come convertitore sembra funzionare bene. Ottimo strumento per una soluzione rapida.
Così ho scritto un semplice VBScript per convertire i file .xls in .xlsx in modo silenzioso.
./convert-xls-xlsx.vbs {percorso della cartella contenente file .xls}
convert-xls-xlsx.vbs:
Impostare args = WScript.Arguments strPath = args (0) strPath = CreateObject ("Scripting.FileSystemObject"). GetAbsolutePathName (strPath) Set objExcel = CreateObject ("Excel.Application") objExcel.Visible = False objExcel.DisplayAlerts = False Set objFso = CreateObject ("Scripting.FileSystemObject") Set objFolder = objFso.GetFolder (strPath) Per ogni objFile In objFolder.Files fileName = objFile.Path If (objFso.GetExtensionName (objFile.Path) = "xls") Quindi Set objWorkbook = objExcel.Workbooks.Open (fileName) saveFileName = Sostituisci (fileName, ". xls", ". xlsx") objWorkbook.SaveCome saveFileName, 51 objWorkbook.Close () objExcel.Application.DisplayAlerts = True Finisci se Il prossimo MsgBox "Conversione terminata"
NOTA: cerca gli spazi nel percorso della cartella, se il tuo percorso ha uno spazio in mezzo, inserisci il percorso tra virgolette.