Converti in batch XLS in XLSX


12

Devo lavorare con una vecchia applicazione che può solo esportare file XLS e scrivo programmi in .Net usando la libreria EPPlus che è in grado di leggere solo file XLSX.

Qual è il modo più semplice per convertire in batch da XLS a XLSX?

Risposte:


6

Dai un'occhiata a Office Migration Planning Manager.

Il toolkit contiene anche Office File Converter (OFC), che consente conversioni di documenti in blocco dai formati binari a OpenXML. ( Technet )

Panoramica su Technet

Link per scaricare

Si noti che avrete anche bisogno del Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint File Formatsper l'OFC al lavoro.
Entrambi gli strumenti non sembrano più essere supportati.


1
Sembra che alcune persone, incluso me, abbiano problemi con questo strumento non riuscendo a convertire i loro file xls per nessun motivo riconoscibile.
John,

3

Consiglio di utilizzare una macro per elaborare i file all'interno di una cartella per convertirli da xls a xlsx. Questo codice presuppone che i file si trovino tutti all'interno di una cartella e che tutti i file xls debbano essere convertiti, ma se si desidera selezionare singoli file questo codice potrebbe essere aggiornato.

Questo codice dovrebbe essere eseguito da una cartella di lavoro di Excel 2007 o superiore.

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

Nota: se i file che si stanno convertendo contengono macro, è necessario aggiornare il file FileFormat:=xlOpenXMLWorkbookda leggere FileFormat:=xlOpenXMLWorkbookMacroEnabled. O se non hai bisogno del codice macro nei file convertiti, potresti lasciarlo solo e rimuoverà le macro quando lo converte nel formato xlsx.


Cosa succede se desidero convertire .CSV in .XLSX?
Boris_yo,

0
Sottotitoli: AllAsXLSX ()
Dim strFilename As String
Dim strDocName As String
Dim strPath come stringa
Dim wbk As Workbook
Dim fDialog Come FileDialog
Dim intPos come numero intero
Dim strPassword As String
Dim strWritePassword As String
Dim varA As String
Dim varB As String
Dim colFiles come nuova collezione
Dim vFile As Variant
Imposta fDialog = Application.FileDialog (msoFileDialogFolderPicker)
Con fDialog
    .Title = "Seleziona la cartella e fai clic su OK"
    .AllowMultiSelect = True
    .InitialView = msoFileDialogViewList
    Se .Mostra -1 Quindi
        MsgBox "Annullato dall'utente", "Elenco contenuto cartella"
        Esci da Sub
    Finisci se
    strPath = fDialog.SelectedItems.Item (1)
    If Right (strPath, 1) "\" Quindi strPath = strPath + "\"
Termina con
If Left (strPath, 1) = Chr (34) Quindi
    strPath = Mid (strPath, 2, Len (strPath) - 2)
Finisci se
Set obj = CreateObject ("Scripting.FileSystemObject")
RecursiveDir colFiles, strPath, "* .xls", True
Per ogni vFile in colFiles
        Debug.Print vFile
    strFilename = vFile
    varA = Right (strFilename, 3)
    If (varA = "xls" O varA = "XLSX") Quindi
     Imposta wbk = Workbooks.Open (Nome file: = strFilename)
       Se wbk.HasVBProject Quindi
              wbk.SaveAs Nome file: = strFilename & "m", FileFormat: = xlOpenXMLWorkbookMacroEnabled
            Altro
               wbk.SaveAs Nome file: = strFilename & "x", FileFormat: = xlOpenXMLWorkbook
            Finisci se
            wbk.Close SaveChanges: = False
           obj.DeleteFile (strFilename)
    Finisci se
File successivo

End Sub
Funzione pubblica RecursiveDir (colFiles As Collection, _
                             strFolder As String, _
                             strFileSpec As String, _
                             bIncludeSubfolders As Boolean)

    Dim strTemp As String
    Dim colFolders come nuova collezione
    Dim vFolderName Come variante

    'Aggiungi file in strFolder corrispondenti a strFileSpec a colFiles
    strFolder = TrailingSlash (strFolder)
    strTemp = Dir (strFolder & strFileSpec)
    Do While strTemp vbNullString
        colFiles.Add strFolder & strTemp
        strTemp = Dir
    Ciclo continuo

    Se bIncludeSubfolders Quindi
        'Riempi colFolders con l'elenco delle sottodirectory di strFolder
        strTemp = Dir (strFolder, vbDirectory)
        Do While strTemp vbNullString
            If (strTemp ".") And (strTemp "..") Quindi
                If (GetAttr (strFolder & strTemp) E vbDirectory) 0 Quindi
                    colFolders.Add strTemp
                Finisci se
            Finisci se
            strTemp = Dir
        Ciclo continuo

        'Chiama RecursiveDir per ogni sottocartella in colFolders
        Per ogni vFolderName In colFolders
            Call RecursiveDir (colFiles, strFolder & vFolderName, strFileSpec, True)
        VFolderName successivo
    Finisci se

Fine funzione
Funzione pubblica TrailingSlash (strFolder As String) As String
    Se Len (strFolder)> 0 Quindi
        If Right (strFolder, 1) = "\" Quindi
            TrailingSlash = strFolder
        Altro
            TrailingSlash = strFolder & "\"
        Finisci se
    Finisci se
Fine funzione


8
Invece di incollare un sacco di codice, potresti forse spiegare un po 'cosa fa, come usarlo e quali sono i limiti (se ce ne sono)? Sarebbe più utile per i futuri visitatori.
slhck,

0

Se hai installato MsOffice, questo strumento potrebbe valere la pena di essere scaricato per una soluzione rapida.

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

Quando selezioni una cartella per vedere i file xls convertiti, assicurati di spuntare l'opzione di strumento di conversione che utilizza MS Office per la conversione, non il proprio convertitore.

Se si utilizza il proprio convertitore, si perderanno i colori nelle celle e il singolo foglio sembra uscire. Se usi MsOffice come convertitore sembra funzionare bene. Ottimo strumento per una soluzione rapida.


0

Così ho scritto un semplice VBScript per convertire i file .xls in .xlsx in modo silenzioso.

./convert-xls-xlsx.vbs {percorso della cartella contenente file .xls}

convert-xls-xlsx.vbs:

    Impostare args = WScript.Arguments
    strPath = args (0)
    strPath = CreateObject ("Scripting.FileSystemObject"). GetAbsolutePathName (strPath)
    Set objExcel = CreateObject ("Excel.Application")
    objExcel.Visible = False
    objExcel.DisplayAlerts = False
    Set objFso = CreateObject ("Scripting.FileSystemObject")
    Set objFolder = objFso.GetFolder (strPath)
    Per ogni objFile In objFolder.Files
        fileName = objFile.Path
        If (objFso.GetExtensionName (objFile.Path) = "xls") Quindi
            Set objWorkbook = objExcel.Workbooks.Open (fileName)
            saveFileName = Sostituisci (fileName, ". xls", ". xlsx")
            objWorkbook.SaveCome saveFileName, 51
            objWorkbook.Close ()
            objExcel.Application.DisplayAlerts = True
        Finisci se
    Il prossimo
    MsgBox "Conversione terminata"

NOTA: cerca gli spazi nel percorso della cartella, se il tuo percorso ha uno spazio in mezzo, inserisci il percorso tra virgolette.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.