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 Formatsper 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:=xlOpenXMLWorkbookda 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.