Batch-Konvertierung von XLS in XLSX


12

Ich muss mit einer alten Anwendung arbeiten, die nur XLS-Dateien exportieren kann, und ich schreibe Programme in .Net mit der EPPlus-Bibliothek, die nur XLSX-Dateien lesen kann.

Was ist der einfachste Weg, um von XLS zu XLSX zu konvertieren?

Antworten:


6

Schauen Sie sich Office Migration Planning Manager an.

Das Toolkit enthält auch den Office File Converter (OFC), der die Konvertierung von Massendokumenten von Binär- in OpenXML-Formate ermöglicht. ( Technet )

Übersicht über Technet

Download-Link

Beachten Sie, dass Sie auch das benötigen, Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint File Formatsdamit das OFC funktioniert.
Beide Tools scheinen nicht mehr wirklich unterstützt zu werden.


1
Es scheint, dass einige Leute, einschließlich mir, Probleme damit haben, dass dieses Tool ihre XLS-Dateien nicht ohne erkennbaren Grund konvertiert.
John

3

Ich würde empfehlen, ein Makro zu verwenden, um die Dateien in einem Ordner zu verarbeiten und sie von xls in xlsx zu konvertieren. Bei diesem Code wird davon ausgegangen, dass sich alle Dateien in einem Ordner befinden und dass alle XLS-Dateien konvertiert werden müssen. Wenn Sie jedoch einzelne Dateien auswählen möchten, kann dieser Code aktualisiert werden.

Dieser Code muss in einer Excel 2007-Arbeitsmappe oder höher ausgeführt werden.

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

Hinweis: Wenn die zu konvertierenden Dateien Makros enthalten, müssen Sie die FileFormat:=xlOpenXMLWorkbookzu lesenden Dateien aktualisieren FileFormat:=xlOpenXMLWorkbookMacroEnabled. Wenn Sie den Makrocode in den konvertierten Dateien nicht benötigen, können Sie ihn in Ruhe lassen und die Makros werden entfernt, wenn er in das xlsx-Format konvertiert wird.


Was ist, wenn ich .CSV in .XLSX konvertieren möchte?
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
IntPos als Ganzzahl dimmen
Dim strPassword As String
Dim strWritePassword As String
Dim varA As String
Dim varB As String
Dim colFiles As New Collection
Dim vFile As Variant
Setze fDialog = Application.FileDialog (msoFileDialogFolderPicker)
Mit fDialog
    .Title = "Ordner auswählen und auf OK klicken"
    .AllowMultiSelect = True
    .InitialView = msoFileDialogViewList
    Wenn .Show -1 Dann
        MsgBox "Vom Benutzer abgebrochen", "Ordnerinhalt auflisten"
        Sub beenden
    End If
    strPath = fDialog.SelectedItems.Item (1)
    Wenn richtig (strPath, 1) "" Dann strPath = strPath + ""
Ende mit
Wenn Links (strPath, 1) = Chr (34) Dann
    strPath = Mid (strPath, 2, Len (strPath) - 2)
End If
Setze obj = CreateObject ("Scripting.FileSystemObject")
RecursiveDir colFiles, strPath, "* .xls", True
Für jede vFile In colFiles
        Debug.Print vFile
    strFilename = vFile
    varA = Rechts (strFilename, 3)
    If (varA = "xls" oder varA = "XLSX") Dann
     Setze wbk = Workbooks.Open (Dateiname: = strFilename)
       Wenn wbk.HasVBProject Dann
              wbk.SaveAs Dateiname: = strFilename & "m", FileFormat: = xlOpenXMLWorkbookMacroEnabled
            Sonst
               wbk.SaveAs Dateiname: = strFilename & "x", FileFormat: = xlOpenXMLWorkbook
            End If
            wbk.Close SaveChanges: = False
           obj.DeleteFile (strFilename)
    End If
Nächste vFile

End Sub
Öffentliche Funktion 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

    'Fügen Sie in strFolder Dateien hinzu, die mit strFileSpec zu colFiles übereinstimmen
    strFolder = TrailingSlash (strFolder)
    strTemp = Dir (strFolder & strFileSpec)
    Do While strTemp vbNullString
        colFiles.Add strFolder & strTemp
        strTemp = Dir
    Schleife

    Wenn bIncludeSubfolders Dann
        'Füllen Sie colFolders mit der Liste der Unterverzeichnisse von strFolder
        strTemp = Dir (strFolder, vbDirectory)
        Do While strTemp vbNullString
            If (strTemp ".") Und (strTemp "..") Dann
                If (GetAttr (strFolder & strTemp) And vbDirectory) 0 Then
                    colFolders.Add strTemp
                End If
            End If
            strTemp = Dir
        Schleife

        'Rufen Sie RecursiveDir für jeden Unterordner in colFolders auf
        Für jeden vFolderName In colFolders
            Rufen Sie RecursiveDir auf (colFiles, strFolder & vFolderName, strFileSpec, True)
        Nächster vFolderName
    End If

Endfunktion
Öffentliche Funktion TrailingSlash (strFolder As String) As String
    Wenn Len (strFolder)> 0 Dann
        Wenn rechts (strFolder, 1) = "\" Dann
            TrailingSlash = strFolder
        Sonst
            TrailingSlash = strFolder & "\"
        End If
    End If
Endfunktion


8
Könnten Sie vielleicht auch ein wenig erklären, was es tut, wie es verwendet wird und welche Einschränkungen es gibt (falls vorhanden), anstatt nur eine Menge Code einzufügen? Das wäre für zukünftige Besucher hilfreicher.
Slhck

0

Wenn Sie MsOffice installiert haben, ist dieses Tool möglicherweise einen Download wert, um eine schnelle Lösung zu finden.

http://www.softinterface.com/Convert-XLS/Features/Convert-XLS-To-XLSX.htm

Wenn Sie einen Ordner auswählen, in dem die konvertierten XLS-Dateien angezeigt werden sollen, aktivieren Sie die Option zum Konvertieren, mit der MS Office für die Konvertierung verwendet wird, und nicht den eigenen Konverter.

Wenn Sie einen eigenen Konverter verwenden, verlieren Sie Farben in den Zellen und ein einzelnes Blatt scheint herauszukommen. Wenn Sie MsOffice als Konverter verwenden, scheint dies gut zu funktionieren. Gutes Werkzeug für eine schnelle Lösung.


0

Also habe ich ein einfaches VBScript geschrieben, um XLS-Dateien stillschweigend in XLSX-Dateien zu konvertieren.

./convert-xls-xlsx.vbs {Pfad zum Ordner mit XLS-Dateien}

convert-xls-xlsx.vbs:

    Setze args = WScript.Arguments
    strPath = args (0)
    strPath = CreateObject ("Scripting.FileSystemObject"). GetAbsolutePathName (strPath)
    Setze objExcel = CreateObject ("Excel.Application")
    objExcel.Visible = False
    objExcel.DisplayAlerts = False
    Setze objFso = CreateObject ("Scripting.FileSystemObject")
    Setze objFolder = objFso.GetFolder (strPath)
    Für jede objFile In objFolder.Files
        Dateiname = objFile.Path
        If (objFso.GetExtensionName (objFile.Path) = "xls") Dann
            Setze objWorkbook = objExcel.Workbooks.Open (Dateiname)
            saveFileName = Ersetzen (Dateiname, ". xls", ". xlsx")
            objWorkbook.SaveAs saveFileName, 51
            objWorkbook.Close ()
            objExcel.Application.DisplayAlerts = True
        End If
    Nächster
    MsgBox "Konvertierung abgeschlossen"

HINWEIS: Achten Sie auf Leerzeichen im Ordnerpfad. Wenn Ihr Pfad ein Leerzeichen dazwischen enthält, setzen Sie den Pfad in Anführungszeichen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.