Conversion par lots de XLS en XLSX

12

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 par lots de XLS en XLSX?

Origine
la source

Réponses:

6

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 )

Présentation de Technet

Lien de téléchargement

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.

ChrisN
la source
1
Il semble que plusieurs personnes, dont moi, ont un problème avec cet outil qui ne parvient pas à convertir leurs fichiers xls sans raison apparente.
John
3

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 lire FileFormat:=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.

Nick Perkins
la source
Que faire si je souhaite convertir .CSV en .XLSX?
Boris_yo
0
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

pratap
la source
8
Au lieu de simplement coller un tas de code, pourriez-vous également expliquer un peu ce qu'il fait, comment l'utiliser et quelles sont les limitations (le cas échéant)? Ce serait plus utile pour les futurs visiteurs.
slhck
0

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.

99Sono
la source
0

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.

revosftw
la source