Conversão de lote XLS para XLSX

11

Tenho que trabalhar com um aplicativo antigo que só pode exportar arquivos XLS e gravar programas em .Net usando a biblioteca EPPlus, que é capaz apenas de ler arquivos XLSX.

Qual é a maneira mais fácil de converter em lote de XLS para XLSX?

Origem
fonte

Respostas:

6

Confira o Office Migration Planning Manager.

O kit de ferramentas também contém o Office File Converter (OFC), que permite conversões em massa de documentos dos formatos binário para OpenXML. ( Technet )

Visão geral sobre Technet

Baixar link

ChrisN
fonte
1
Parece que muitas pessoas, inclusive eu, têm problemas com essa ferramenta ao converter seus arquivos xls sem motivo aparente.
John
2

Eu recomendo usar uma macro para processar os arquivos em uma pasta para convertê-los de xls para xlsx. Esse código pressupõe que todos os arquivos estejam localizados em uma pasta e que todos os arquivos xls precisam ser convertidos, mas se você quiser selecionar arquivos individuais, esse código poderá ser atualizado.

Esse código precisaria ser executado em uma pasta de trabalho do 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

Se os arquivos que você está convertendo contiverem macros, será necessário atualizar o 'FileFormat: = 51' para ler 'FileFormat: = 52'. Ou, se você não precisar codificar macro nos arquivos convertidos, poderá deixá-lo em paz e ele removerá as macros quando o converter no formato xlsx.

Nick Perkins
fonte
E se eu quiser converter .CSV para .XLSX?
Boris_yo 22/09
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 como inteiro
Dim strPassword As String
Dim strWritePassword As String
Dim varA As String
Dim varB As String
Dim colFiles como nova coleção
Dim vFile como variante
Defina fDialog = Application.FileDialog (msoFileDialogFolderPicker)
Com fDialog
    .Title = "Selecione a pasta e clique em OK"
    .AllowMultiSelect = True
    .InitialView = msoFileDialogViewList
    Se .Show -1 Então
        MsgBox "Cancelado pelo Usuário",, "Listar Conteúdo da Pasta"
        Sair do Sub
    Fim se
    strPath = fDialog.SelectedItems.Item (1)
    Se estiver certo (strPath, 1) "\" Então strPath = strPath + "\"
Terminar com
Se esquerda (strPath, 1) = Chr (34), então
    strPath = Mid (strPath, 2, Len (strPath) - 2)
Fim se
Definir obj = CreateObject ("Scripting.FileSystemObject")
RecursiveDir colFiles, strPath, "* .xls", True
Para cada vFile em colFiles
        Debug.Print vFile
    strFilename = vFile
    varA = Direita (strFilename, 3)
    Se (varA = "xls" ou varA = "XLSX"), então
     Defina wbk = Workbooks.Open (nome do arquivo: = strFilename)
       Se wbk.HasVBProject Then
              wbk.SaveAs Nome do arquivo: = strFilename & "m", FileFormat: = xlOpenXMLWorkbookMacroEnabled
            Outro
               wbk.SaveAs Nome do arquivo: = strFilename & "x", FileFormat: = xlOpenXMLWorkbook
            Fim se
            wbk.Close SaveChanges: = False
           obj.DeleteFile (strFilename)
    Fim se
Próximo vFile

End Sub
Função pública RecursiveDir (colFiles As Collection, _
                             strFolder como String, _
                             strFileSpec como String, _
                             bIncludeSubfolders As Boolean)

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

    'Adicionar arquivos no strFolder que correspondam strFileSpec a colFiles
    strFolder = TrailingSlash (strFolder)
    strTemp = Dir (strFolder & strFileSpec)
    Do While strTemp vbNullString
        colFiles.Add strFolder & strTemp
        strTemp = Dir
    Loop

    Se bIncludeSubpolders Then
        'Preencher colFolders com a lista de subdiretórios do strFolder
        strTemp = Dir (pasta do arquivo, vbDirectory)
        Do While strTemp vbNullString
            If (strTemp ".") E (strTemp "..") Então
                If (GetAttr (strFolder & strTemp) And vbDirectory) 0 Então
                    colFolders.Add strTemp
                Fim se
            Fim se
            strTemp = Dir
        Loop

        'Chame RecursiveDir para cada subpasta em colFolders
        Para cada vFolderName em colFolders
            Chame RecursiveDir (colFiles, strFolder & vFolderName, strFileSpec, True)
        Próximo vFolderName
    Fim se

Função final
Função pública TrailingSlash (strFolder As String) Como String
    Se Len (strFolder)> 0 Então
        If Right (strFolder, 1) = "\" Então
            TrailingSlash = strFolder
        Outro
            TrailingSlash = strFolder & "\"
        Fim se
    Fim se
Função final

pratap
fonte
8
Em vez de colar um monte de código, você também pode explicar um pouco o que ele faz, como usá-lo e quais são as limitações (se houver)? Isso seria mais útil para futuros visitantes.
Slhck 5/11
0

Se você possui o MsOffice instalado, essa ferramenta pode valer um download para uma solução rápida.

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

Quando você seleciona uma pasta para ver os arquivos xls convertidos, marque a opção da ferramenta de conversão que usa o MS Office na conversão, e não o próprio conversor.

Se você usar seu próprio conversor, perderá cores nas células e uma única folha parece sair. Se você usar o MsOffice como o conversor parece funcionar bem. Boa ferramenta para uma solução rápida.

99Sono
fonte
0

Então, escrevi um VBScript simples para converter arquivos .xls em .xlsx de maneira silenciosa.

./convert-xls-xlsx.vbs {caminho para a pasta que contém arquivos .xls}

convert-xls-xlsx.vbs:

    Definir args = WScript.Arguments
    strPath = args (0)
    strPath = CreateObject ("Scripting.FileSystemObject"). GetAbsolutePathName (strPath)
    Defina objExcel = CreateObject ("Excel.Application")
    objExcel.Visible = False
    objExcel.DisplayAlerts = False
    Defina objFso = CreateObject ("Scripting.FileSystemObject")
    Definir objFolder = objFso.GetFolder (strPath)
    Para cada objFile Em objFolder.Files
        fileName = objFile.Path
        If (objFso.GetExtensionName (objFile.Path) = "xls") Então
            Definir objWorkbook = objExcel.Workbooks.Open (fileName)
            saveFileName = Substituir (nome do arquivo, ". xls", ". xlsx")
            objWorkbook.SaveAs saveFileName, 51
            objWorkbook.Close ()
            objExcel.Application.DisplayAlerts = True
        Fim se
    Próximo
    MsgBox "Conversão concluída"

NOTA: Procure espaços no caminho da pasta; se o caminho tiver um espaço intermediário, coloque-o entre aspas.

revosftw
fonte