Exportar uma planilha do Excel para um arquivo de texto com largura fixa?

22

O Excel tem a funcionalidade de importar arquivos de texto de largura fixa, onde apresenta uma caixa de diálogo que permite escolher onde os campos de início e término são colocados em colunas.

Ela também tem funcionalidade onde, dada uma planilha existente, você pode exportar para um arquivo de texto de largura fixa?

Se sim, como faço para acessar isso? Eu tentei usar Salvar Como e escolher Arquivo de Texto, mas ele parece salvar apenas como delimitado por Tabulação, o que não me ajuda.

Este é o Excel 2003, se for importante.

    
por RationalGeek 25.01.2010 / 20:02

7 respostas

23

Acho que o mais próximo que você pode obter da funcionalidade nativa do Excel é Salvar como | Texto Formatado (Espaço Delimitado) (* .prn) . Ele determinará automaticamente as larguras e inserirá espaços para preencher essa largura conforme necessário.

Além disso, você precisa ter uma macro ou outro add-in que permita fazer mais.

    
por 25.01.2010 / 20:16
12

Se você tiver o Office Professional, poderá abrir o arquivo do Excel no Access e, em seguida, em Exportar do Access. O Access permite que você especifique um layout de largura fixa para o arquivo exportado e oferece controles extremamente granulares para especificar essas larguras.

    
por 25.01.2010 / 21:34
5

Nossa, eu mesmo faria essa pergunta, mas já foi perguntado. Toda a saída da área de transferência do Excel é guia delimitada por padrão. Isso é irritante para a saída de texto simples "real" quando você tem uma fonte de largura fixa, mas não necessariamente um suporte ao delimitador de tabulação.

De qualquer forma, eu encontrei e modifiquei uma pequena Macro do Excel que irá copiar a região atualmente selecionada como uma tabela ASCII de colunas de largura fixa simples - assim:

187712 201    37     0.18   
2525   580    149    0.25   
136829 137    43     0.31   

Aqui está o código Macro. Para usá-lo, certifique-se de ativar a guia Desenvolvedor nas Opções do Excel se estiver usando o Excel 2007 ou posterior.

Sub CopySelectionToClipboardAsText()

   ' requires a reference to "Windows Forms 2.0 Object Library"
   ' add it via Tools / References; if it does not appear in the list
   ' manually add it as the path C:\Windows\System32\FM20.dll

    Dim r As Long, c As Long
    Dim selectedrows As Integer, selectedcols As Integer

    Dim arr
    arr = ActiveSheet.UsedRange
    selectedrows = UBound(arr, 1)
    selectedcols = UBound(arr, 2)

    Dim temp As Integer
    Dim cellsize As Integer
    cellsize = 0
    For c = 1 To selectedcols
        temp = Len(CStr(Cells(1, c)))
        If temp > cellsize Then
            cellsize = temp
        End If
    Next c
    cellsize = cellsize + 1

    Dim line As String
    Dim output As String

    For r = 1 To selectedrows
        line = Space(selectedcols * cellsize)
        For c = 1 To selectedcols
            Mid(line, c * cellsize - cellsize + 1, cellsize) = Cells(r, c)
        Next c
        output = output + line + Chr(13) + Chr(10)
    Next r

    Dim MyData As MSForms.DataObject
    Set MyData = New DataObject
    MyData.SetText output
    MyData.PutInClipboard

    MsgBox "The current selection was formatted and copied to the clipboard"

End Sub
    
por 18.03.2010 / 02:43
4

Primeiro, formate seus dados como Courier New (ou alguma outra fonte de largura fixa). Em seguida, salve como .prn e você terá uma largura fixa real.

    
por 25.01.2010 / 22:12
2

Expandindo a resposta de Jeff Atwood, uma vez que não permitiria comentários:

Eu modifiquei a macro dele para definir a largura da coluna para a célula mais larga nessa coluna e para ter cada coluna com sua própria largura. Sua macro encontrou apenas a célula mais larga na primeira linha e, em seguida, definiu a largura de todas as colunas para ela.

Sub CopySelectionToClipboardAsText()

   ' requires a reference to "Windows Forms 2.0 Object Library"
   ' add it via Tools / References; if it does not appear in the list
   ' manually add it as the path C:\Windows\System32\FM20.dll

    Dim r As Long, c As Long, linesize As Long
    Dim selectedrows As Integer, selectedcols As Integer

    Dim arr
    arr = ActiveSheet.UsedRange
    selectedrows = UBound(arr, 1)
    selectedcols = UBound(arr, 2)
    ReDim CellSizes(1 To selectedcols, 2) As Integer

    Dim temp As Integer
    Dim cellsize As Integer
    linesize = 0
    For c = 1 To selectedcols
        cellsize = 0
        For r = 1 To selectedrows
            temp = Len(CStr(Cells(r, c)))
            If temp > cellsize Then
                cellsize = temp
            End If
        Next
        CellSizes(c, 0) = cellsize + 1
        CellSizes(c, 1) = linesize
        linesize = linesize + cellsize + 1
    Next c

    Dim line As String
    Dim output As String

    For r = 1 To selectedrows
        line = Space(linesize)
        For c = 1 To selectedcols
            Mid(line, CellSizes(c, 1) + 1, CellSizes(c, 0)) = Cells(r, c)
        Next c
        output = output + line + Chr(13) + Chr(10)
    Next r

    Dim MyData As MSForms.DataObject
    Set MyData = New DataObject
    MyData.SetText output
    MyData.PutInClipboard

    MsgBox "The current selection was formatted and copied to the clipboard"

End Sub
    
por 02.07.2015 / 19:00
0

Isso é um assassino para mim. Tem algumas opções também.

link

    
por 28.05.2015 / 10:21
0

Funciona com o Access pronto para uso: link com este caminho eu administrei muito fácil e rápido - melhor que com o Excel. No meu caso, foi uma conversão da tabela.

    
por 13.06.2018 / 13:29