Réponses:
Consultez Office Migration Planning Manager.
La boîte à outils contient également le convertisseur de fichiers Office (OFC), qui permet des conversions de documents en masse des formats binaires aux formats OpenXML. ( Technet )
Notez que vous aurez également besoin du Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint File Formatspour que l'OFC fonctionne.
Les deux outils ne semblent plus vraiment être pris en charge.
Je recommande d'utiliser une macro pour traiter les fichiers d'un dossier afin de les convertir de xls en xlsx. Ce code suppose que les fichiers sont tous situés dans un dossier et que tous les fichiers xls doivent être convertis, mais si vous souhaitez sélectionner des fichiers individuels, ce code peut être mis à jour.
Ce code devrait être exécuté à partir d'un classeur Excel 2007 ou supérieur.
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
Remarque: Si les fichiers que vous convertissez contiennent des macros, vous devrez mettre à jour le
FileFormat:=xlOpenXMLWorkbookpour lireFileFormat:=xlOpenXMLWorkbookMacroEnabled. Ou si vous n'avez pas besoin du code de macro dans les fichiers convertis, vous pouvez le laisser seul et il supprimera les macros lorsqu'il le convertira au format xlsx.
Sub SaveAllAsXLSX ()
Dim strFilename As String
Dim strDocName As String
Dim strPath As String
Dim wbk As Workbook
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 comme nouvelle collection
Dim vFile As Variant
Définissez fDialog = Application.FileDialog (msoFileDialogFolderPicker)
Avec fDialog
.Title = "Sélectionnez le dossier et cliquez sur OK"
.AllowMultiSelect = True
.InitialView = msoFileDialogViewList
Si .Afficher -1 Alors
MsgBox "Annulé par l'utilisateur",, "Liste du contenu du dossier"
Quitter sous
Fin si
strPath = fDialog.SelectedItems.Item (1)
If Right (strPath, 1) "\" Then strPath = strPath + "\"
Terminer par
Si Left (strPath, 1) = Chr (34) Then
strPath = Mid (strPath, 2, Len (strPath) - 2)
Fin si
Set obj = CreateObject ("Scripting.FileSystemObject")
RecursiveDir colFiles, strPath, "* .xls", True
Pour chaque vFile dans colFiles
Debug.Print vFile
strFilename = vFile
varA = Right (strFilename, 3)
Si (varA = "xls" Ou varA = "XLSX") Alors
Définissez wbk = Workbooks.Open (Filename: = strFilename)
Si wbk.HasVBProject Alors
wbk.SaveAs Filename: = strFilename & "m", FileFormat: = xlOpenXMLWorkbookMacroEnabled
Autre
wbk.SaveAs Filename: = strFilename & "x", FileFormat: = xlOpenXMLWorkbook
Fin si
wbk.Close SaveChanges: = False
obj.DeleteFile (strFilename)
Fin si
VFile suivant
End Sub
Fonction publique RecursiveDir (colFiles As Collection, _
strFolder As String, _
strFileSpec As String, _
bIncludeSubfolders As Boolean)
Dim strTemp As String
Dim colFolders comme nouvelle collection
Dim vFolderName As Variant
'Ajouter des fichiers dans strFolder correspondant à strFileSpec à colFiles
strFolder = TrailingSlash (strFolder)
strTemp = Dir (strFolder & strFileSpec)
Faire pendant que strTemp vbNullString
colFiles.Add strFolder & strTemp
strTemp = Dir
Boucle
Si bIncludeSubfolders Then
'Remplissez colFolders avec la liste des sous-répertoires de strFolder
strTemp = Dir (strFolder, vbDirectory)
Faire pendant que strTemp vbNullString
Si (strTemp ".") Et (strTemp "..") Alors
If (GetAttr (strFolder & strTemp) Et vbDirectory) 0 Then
colFolders.Add strTemp
Fin si
Fin si
strTemp = Dir
Boucle
'Appelez RecursiveDir pour chaque sous-dossier dans colFolders
Pour chaque vFolderName dans colFolders
Appel RecursiveDir (colFiles, strFolder & vFolderName, strFileSpec, True)
VFolderName suivant
Fin si
Fonction de fin
Fonction publique TrailingSlash (strFolder As String) As String
Si Len (strFolder)> 0 Then
If Right (strFolder, 1) = "\" Then
TrailingSlash = strFolder
Autre
TrailingSlash = strFolder & "\"
Fin si
Fin si
Fonction de fin
Si vous avez installé MsOffice, cet outil peut valoir la peine d'être téléchargé pour une solution rapide.
http://www.softinterface.com/Convert-XLS/Features/Convert-XLS-To-XLSX.htm
Lorsque vous sélectionnez un dossier pour voir les fichiers xls convertis, assurez-vous de cocher l'option d'outil de conversion qui utilise MS Office pour la conversion, pas leur propre convertisseur.
Si vous utilisez leur propre convertisseur, vous perdrez des couleurs dans les cellules et une seule feuille semble sortir. Si vous utilisez MsOffice, le convertisseur semble fonctionner correctement. Bon outil pour une solution rapide.
J'ai donc écrit un simple VBScript pour convertir les fichiers .xls en .xlsx de manière silencieuse.
./convert-xls-xlsx.vbs {chemin vers le dossier contenant les fichiers .xls}
convert-xls-xlsx.vbs:
Définissez args = WScript.Arguments
strPath = args (0)
strPath = CreateObject ("Scripting.FileSystemObject"). GetAbsolutePathName (strPath)
Définir objExcel = CreateObject ("Excel.Application")
objExcel.Visible = False
objExcel.DisplayAlerts = False
Set objFso = CreateObject ("Scripting.FileSystemObject")
Définissez objFolder = objFso.GetFolder (strPath)
Pour chaque objFile dans objFolder.Files
fileName = objFile.Path
If (objFso.GetExtensionName (objFile.Path) = "xls") Then
Définissez objWorkbook = objExcel.Workbooks.Open (fileName)
saveFileName = Remplacer (fileName, ". xls", ". xlsx")
objWorkbook.SaveAs saveFileName, 51
objWorkbook.Close ()
objExcel.Application.DisplayAlerts = True
Fin si
Suivant
MsgBox "Conversion terminée"
Remarque: recherchez les espaces dans le chemin du dossier, si votre chemin a un espace entre les deux, mettez le chemin entre guillemets.