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.