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

Eine Excel-Tabelle in eine Textdatei mit fester Breite exportieren?

Advertisement

Excel hat die Funktionalität, Textdateien mit fester Breite zu importieren, wobei ein Dialogfeld angezeigt wird, in dem Sie den Anfang und das Ende von Feldern auswählen können, die dann in Spalten eingefügt werden.

Gibt es auch eine Funktion, mit der Sie eine bestehende Tabelle in eine Textdatei mit fester Breite exportieren können?

Wenn ja, wie kann ich darauf zugreifen? Ich habe es mit Speichern unter und der Auswahl von Textdatei versucht, aber es scheint nur als Tabulator-getrennte Datei zu speichern, was mir nicht weiterhilft.

Dies ist Excel 2003, falls das eine Rolle spielt.

Advertisement
Advertisement

Antworten (7)

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

Ich denke, am nächsten an der nativen Excel-Funktionalität kommt Speichern unter | Formatierter Text (mit Leerzeichen getrennt) (*.prn). Es wird automatisch die Breiten bestimmen und Leerzeichen einfügen, um auf diese Breite aufzufüllen, wenn nötig.

Darüber hinaus benötigen Sie ein Makro oder ein anderes Add-In, mit dem Sie mehr tun können.

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

Wenn Sie Office Professional verwenden, können Sie Ihre Excel-Datei in Access öffnen und dann aus Access exportieren. Access ermöglicht es Ihnen, ein Layout mit fester Breite für Ihre exportierte Datei festzulegen, und bietet Ihnen extrem granulare Steuerelemente zum Festlegen dieser Breiten.

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

Wow, ich wollte diese Frage selbst stellen, aber sie wurde bereits gestellt. Alle Excel-Zwischenablage-Ausgaben sind standardmäßig tabulatorgetrennt. Das ist irgendwie ärgerlich für “echte” Klartextausgaben, wenn man eine Schrift mit fester Breite hat, aber nicht unbedingt Tabulatorbegrenzer unterstützt.

Wie auch immer, ich habe ein kleines Excel-Makro gefunden und modifiziert, das den aktuell ausgewählten Bereich als einfache ASCII-Tabelle mit fester Spaltenbreite kopiert - etwa so:

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

Hier ist der Makro-Code. Um ihn zu verwenden, stellen Sie sicher, dass Sie die Registerkarte Entwickler in den Excel-Optionen aktivieren, wenn Sie Excel 2007 oder später verwenden.

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

Formatieren Sie zunächst Ihre Daten als Courier New (oder eine andere Schriftart mit fester Breite). Speichern Sie dann als .prn und Sie erhalten eine echte feste Breite.

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

Ich erweitere die Antwort von Jeff Atwood, da ich dort keinen Kommentar abgeben konnte:

Ich habe sein Makro so modifiziert, dass die Spaltenbreite auf die breiteste Zelle in dieser Spalte gesetzt wird und dass jede Spalte ihre eigene Breite hat. Sein Makro fand nur die breiteste Zelle in der ersten Zeile und setzte dann die Breite aller Spalten auf diese.

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

Das ist ein Killer für mich. Es hat auch ein paar Optionen. http://www.sensefulsolutions.com/2010/10/format-text-as-table.html

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

Es funktioniert mit Access out of the box: https://support.office.com/en-ie/article/export-data-to-a-text-file-f72dfc38-a8a0-4c5b-8c2c-bf2950814140#bmsteps auf diese Weise habe ich es recht einfach und schnell hinbekommen - besser als mit Excel. In meinem Fall war es eine Konvertierung der Tabelle.

Advertisement

Verwandte Fragen

5
8
5
2
1
Advertisement
Advertisement