2010-01-25 19:02:42 +0000 2010-01-25 19:02:42 +0000
24
24

Exportar uma folha de cálculo Excel para um ficheiro de texto de largura fixa?

O Excel tem a funcionalidade de importar ficheiros de texto de largura fixa onde apresenta um diálogo que lhe permite escolher onde o início e o fim dos campos são os que coloca nas colunas.

Também tem a funcionalidade onde, dada uma folha de cálculo existente, pode exportar para um ficheiro de texto de largura fixa?

Em caso afirmativo, como posso aceder a isto? Tentei utilizar Save As e escolher Ficheiro de Texto, mas parece salvar apenas como Tab-delimitado, o que não me ajuda.

Isto é Excel 2003 se for importante.

Respostas (7)

24
24
24
2010-01-25 19:16:55 +0000

Penso que o mais próximo que se pode obter da funcionalidade nativa do Excel é Save As | Formatted Text (Space Delimited) (*.prn). Determinará automaticamente as larguras e introduzirá espaços para almofadar a essa largura, conforme necessário.

Além disso, é necessário ter uma macro ou outro suplemento que lhe permita fazer mais.

14
14
14
2010-01-25 20:34:43 +0000

Se tiver o Office Professional, pode abrir o seu ficheiro Excel no Access, e depois Exportar do Access. O Access permitir-lhe-á especificar um esquema de largura fixa para o seu ficheiro exportado, e dá-lhe controlos extremamente granulares para especificar essas larguras.

5
5
5
2010-03-18 01:43:08 +0000

Uau, eu próprio ia fazer esta pergunta, mas já a tinha feito. Toda a saída da prancheta Excel é delimitada por defeito por uma aba. Isto é um pouco irritante para a saída de texto simples “real” quando se tem uma fonte de largura fixa mas não necessariamente suporte de separador delimitador.

De qualquer modo, encontrei e modifiquei uma pequena Macro Excel que irá copiar a região actualmente seleccionada como uma simples tabela ASCII de largura fixa - como tal:

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

Aqui está o código da Macro. Para o utilizar, certifique-se de activar o separador Desenvolvedor em Opções Excel se estiver a utilizar 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
4
4
4
2010-01-25 21:12:44 +0000

Primeiro, formate os seus dados como Courier New (ou alguma outra fonte de largura fixa). Depois, salve como .prn e obterá uma verdadeira largura fixa.

2
2
2
2015-07-02 17:00:34 +0000

Expandindo a resposta de Jeff Atwood, uma vez que não me deixaria comentá-la:

Eu modifiquei a sua macro para definir a largura da coluna para a célula mais larga daquela coluna e para ter cada coluna a sua própria largura. A sua macro só encontrou a célula mais larga na primeira linha e depois 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
0
0
0
2015-05-28 08:21:09 +0000

Isto é um assassino para mim. Tem também algumas opções. http://www.sensefulsolutions.com/2010/10/format-text-as-table.html

0
0
0
2018-06-13 11:29:12 +0000

Funciona com o Access out of the box: https://support.office.com/en-ie/article/export-data-to-a-text-file-f72dfc38-a8a0-4c5b-8c2c-bf2950814140#bmsteps com esta forma geri-o bastante fácil e rápido - melhor do que com o Excel. No meu caso, foi uma conversão da tabela.