Conversion par lots XLS à XLSX

Je dois travailler avec une ancienne application qui ne peut exporter que des fichiers XLS et j'écris des programmes en .Net en utilisant la bibliothèque EPPlus qui n'est capable que de lire des fichiers XLSX.

Quelle est la façon la plus simple de convertir en lots de XLS à XLSX?

Consultez Office Migration Planning Manager.

La boîte à outils contient également le convertisseur de fichiers Office (OFC), qui permet des conversions en vrac de documents de formats binaires aux formats OpenXML. ( Technet )

Aperçu sur Technet

Lien de téléchargement

 Sub SaveAllAsXLSX ()
 Dim strFilename As String
 Dim strDocName As String
 Dim strath comme chaîne
 Dim wbk As Workbook
 Dim fDialog As FileDialog
 Dim intPos As Integer
 Dim strasson comme chaîne
 Dim strWritePassword As String
 Dim varA As String
 Dim varB As String
 Dim ColFiles As New Collection
 Dim vFile As Variant
 Définir fDialog = Application.FileDialog (msoFileDialogFolderPicker)
 Avec fDialog
     .Title = "Sélectionnez le dossier et cliquez sur OK"
     .AllowMultiSelect = True
     .InitialView = msoFileDialogViewList
     Si. Montrer -1 alors
         MsgBox "Annulé par l'utilisateur", "Liste des contenus du dossier"
         Exit Sub
     Fin si
     StrPath = fDialog.SelectedItems.Item (1)
     Si à droite (strPath, 1) "\" Ensuite strPath = strPath + "\"
 Terminer par
 Si à gauche (strPath, 1) = Chr (34) Ensuite
     StrPath = Mid (strPath, 2, Len (strPath) - 2)
 Fin si
 Set obj = CreateObject ("Scripting.FileSystemObject")
 RecursiveDir colFiles, strPath, "* .xls", True
 Pour chaque fichier vFile dans colFiles
         Debug.Print vFile
     StrFilename = vFile
     VarA = Droite (strFilename, 3)
     Si (varA = "xls" ou varA = "XLSX") Ensuite
      Définir wbk = Workbooks.Open (Nom de fichier: = strFilename)
        Si wbk.HasVBProject Then
               Wbk.SaveAs Nom du fichier: = strFilename & "m", FileFormat: = xlOpenXMLWorkbookMacroEnabled
             Autre
                Wbk.SaveAs Nom du fichier: = strFilename & "x", FileFormat: = xlOpenXMLWorkbook
             Fin si
             Wbk.Fermer SaveChanges: = False
            Obj.DeleteFile (strFilename)
     Fin si
 Suivant vFile

 End Sub
 Fonction publique RecursiveDir (colFiles As Collection, _
                              StrFolder As String, _
                              StrFileSpec As String, _
                              BIncludeSubfolders As Boolean)

     Dim strTemp As String
     Dim ColFolders As New Collection
     Dim vFolderName As Variant

     'Ajouter des fichiers dans strFolder correspondant strFileSpec à colFiles
     StrFolder = TrailingSlash (strFolder)
     StrTemp = Dir (strFolder & strFileSpec)
     Faites alors que strTemp vbNullString
         ColFiles.Add strFolder & strTemp
         StrTemp = Dir
     Boucle

     Si bIncludeSubfolders Then
         'Remplissez colFolders avec une liste de sous-répertoires de strFolder
         StrTemp = Dir (strFolder, vbDirectory)
         Faites alors que strTemp vbNullString
             Si (strTemp ".") Et (strTemp "...") Ensuite
                 Si (GetAttr (strFolder & strTemp) Et vbDirectory) 0 Ensuite
                     ColFolders.Add strTemp
                 Fin si
             Fin si
             StrTemp = Dir
         Boucle

         'Appelez RecursiveDir pour chaque sous-dossier dans colFolders
         Pour chaque vFolderName dans colFolders
             Appelez RecursiveDir (colFiles, strFolder & vFolderName, strFileSpec, True)
         Suivant vFolderName
     Fin si

 Fonction de fin
 Fonction publique TrailingSlash (strFolder As String) en tant que chaîne
     Si Len (strFolder)> 0 Then
         Si droit (strFolder, 1) = "\" Ensuite
             TrailingSlash = strFolder
         Autre
             TrailingSlash = strFolder & "\"
         Fin si
     Fin si
 Fonction de fin

Je recommanderais d'utiliser une macro pour traiter les fichiers dans un dossier pour les convertir de xls à 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 pourrait être mis à jour.

Ce code devrait être exécuté à partir d'un classeur Excel 2007 ou Excel 2010.

Option Explicit ' Convert all xls files in selected folder to xlsx 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 strConversionPath = .SelectedItems(1) End With Set FSO = New Scripting.FileSystemObject ' Check if the folder exists If FSO.FolderExists(strConversionPath) Then Set fFolder = FSO.GetFolder(strConversionPath) ' Loop through files, find the .xls files For Each fFile In fFolder.Files If Right(fFile.Name, 4) = ".xls" Or Right(fFile.Name, 4) = ".XLS" Then Application.DisplayAlerts = False Set wkbConvert = Workbooks.Open(fFile.Path) ' Save as XML workbook - if file contains macros change FileFormat:=52 wkbConvert.SaveAs FSO.BuildPath(fFile.ParentFolder, Left(fFile.Name, Len(fFile.Name) - 4)) & ".xlsx", FileFormat:=51 wkbConvert.Close SaveChanges:=False ' Delete original file fFile.Delete Force:=True Application.DisplayAlerts = True End If Next fFile End If End Sub 

Si les fichiers que vous convertissez contiennent des macros, vous devriez mettre à jour le 'FileFormat: = 51' pour lire 'FileFormat: = 52'. Ou si vous n'avez pas besoin de code macro dans les fichiers convertis, vous pouvez le laisser seul et il supprimera les macros quand il le converti au format xlsx.

Si vous avez installé MsOffice, cet outil pourrait valoir un téléchargement 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 converti, 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 apparaître. Si vous utilisez le MsOffice, le convertisseur semble fonctionner bien. Bon outil pour une solution rapide.