Mass Converter .xls e .xlsx para .txt (Delimitado por Tabulação) em um Mac

3

Eu tenho cerca de 150 arquivos .xls e .xlsx que eu preciso converter em delimitado por tabulação. Eu tentei usar o automator, mas só consegui fazer isso um por um. É definitivamente mais rápido do que abrir cada um individualmente, no entanto. Eu tenho muito pouco conhecimento de script, então gostaria de uma maneira de fazer isso da forma mais indolor possível.

    
por Jarrett G. 23.07.2013 / 01:33

4 respostas

2

(Eu sei que você está em um MAC, então minha resposta pode não ser tão útil para você. Mas para usuários do Windows talvez. Btw. há uma reimplementação de código aberto Powershell para MAC e Linux lá fora chamada PASH )

Como converter facilmente vários arquivos do Excel para qualquer formato desejado

Faça o download deste roteiro Powershell e execute-o. Isso é tudo. :)

Ele pedirá uma pasta e itera através de todos os XLSX, XLS, XLSB nesta pasta e suas subpastas. Em seguida, o Powershell cria uma instância oculta do Excel para usar os comandos Excels internal Open e Save as para converter todos os arquivos para o formato desejado. Atualmente para arquivos TXT delimitados por tabulações desde que o OP pede. Nomes de arquivos e estruturas de pastas são preservados.

Uma coisa interessante é que até várias planilhas são salvas em um arquivo separado se você escolher, por exemplo, CSV ou TXT. Normalmente, somente a primeira planilha é salva ao usar o diálogo Salvar como do Excel

Se você precisar de outro formato, altere -4158 no código-fonte para seu valor. Abaixo estão alguns formatos comuns retirados de MSDN .

Open XML Workbook      XLSX            51           xlOpenXMLWorkbook 
Excel 2003             XLS             56           xlExcel8
Excel12                XLSB            50           xlExcel12 
Current Platform Text  CSV             -4158        xlCurrentPlatformText 
HTML format            HTML            44           xlHtml 
Unicode Text           TXT             42           xlUnicodeText 
DBF4                   DBF             11           xlDBF4 

Código-fonte

    $object = New-Object -comObject Shell.Application  
    $folder = $object.BrowseForFolder(0, 'Select the folder', 0)    

    if (!$folder) {exit} 

    $excel = New-Object -comObject Excel.Application
    $excel.Visible = $false
    $excel.DisplayAlerts = $false

    foreach ($file in Get-ChildItem -literalPath $folder.self.Path*.xls? -recurse) {
        $workbook = $excel.Workbooks.Open($file.Fullname)    
        foreach ($worksheet in $workbook.Sheets) {                    
            $worksheet.activate()          
            $newpath = $File.DirectoryName +"\"+ $file.BaseName + " - " + $worksheet.name + ".csv"
            $workbook.SaveAs($newpath,-4158 ,$null,$null)
        }
        $workbook.Close()
    }
    $excel.quit()    

    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook)
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
    [System.GC]::Collect() 
    [System.GC]::WaitForPendingFinalizers()
  • Dependências: Excel 2003 ou superior e Powershell (pré-instalado no Windows 7)
por 25.07.2013 / 20:46
1

Abra uma das pastas de trabalho, vá para a guia developer , clique em visual basic e insira este código como module

Altere PATH para a pasta onde estão todas as pastas de trabalho. O segundo PATH é onde você quer salvar os arquivos de texto.

Observação de que você só pode salvar o primeiro worksheet em cada arquivo, pois o texto delimitado por tabulações não oferece suporte a várias planilhas.

Sub openandsave()
Dim lCount As Long
Dim wbResults As Workbook
Dim wbCodeBook As Workbook


Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False

On Error Resume Next
    Set wbCodeBook = ThisWorkbook
        With Application.FileSearch
            .NewSearch
            .LookIn = "PATH"
            .FileType = msoFileTypeExcelWorkbooks
                If .Execute > 0 Then
                    For lCount = 1 To .FoundFiles.Count
                        Set wbResults = Workbooks.Open(Filename:=.FoundFiles(lCount), UpdateLinks:=0)
                            ActiveWorkbook.SaveAs Filename:="PATH" AND .Foundfiles(lcount) AND ".txt", FileFormat _
                            :=xlText, CreateBackup:=False
                    Next lCount
                End If
        End With
On Error GoTo 0
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.EnableEvents = True
End Sub

Se não funcionar, eu poderia ter errado no SaveAs Filename

Com recursos daqui

    
por 23.07.2013 / 02:18
0

Você pode usar uma linguagem de script para iterar todos eles com alguma biblioteca do Excel e fazer algum tipo de RegEx para converter certos caracteres em guias. Eu posso esboçar e postar depois.

    
por 23.07.2013 / 01:45
0

Aqui está um Applescript destinado a ser implementado como um droplet (ou seja, um aplicativo no qual você pode arrastar vários arquivos).

Há espaço para polimento, mas espero que você consiga o trabalho essencial.

property type_list : {"XLS6", "XLS7", "XLS8", "XLSX"}
property extension_list : {"xls", "xlsx"}


on open these_workbooks
    repeat with k from 1 to the count of these_workbooks
        set this_item to item k of these_workbooks
        set the item_info to info for this_item

        --this if statement tests to make sure the items you're converting are Excel spreadsheets and not folders or aliases
        if (folder of the item_info is false) and (alias of the item_info is false) and ((the file type of the item_info is in the type_list) or the name extension of the item_info is in the extension_list) then

            tell application "Finder" to open this_item

            tell application "Microsoft Excel 2011"
                --this just tacks on ".txt" to your file name
                set workbookName to (name of active workbook & ".txt")
                --save the current open workbook as a tab-delimited text file
                tell active workbook to save workbook as filename workbookName file format text Mac file format
                close active workbook saving no
            end tell
        end if
    end repeat
end open

on run
    display dialog "Drop Excel files onto this icon."
end run
    
por 28.07.2013 / 23:45