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

24

Excel verfügt über die Funktion zum Importieren von Textdateien mit fester Breite, in denen ein Dialogfeld angezeigt wird, in dem Sie auswählen können, wo die Felder beginnen und enden, die in Spalten abgelegt werden sollen.

Hat es auch Funktionen, mit denen Sie bei einer vorhandenen Tabelle in eine Textdatei mit fester Breite exportieren können ?

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

Dies ist Excel 2003, wenn es darauf ankommt.

RationalGeek
quelle

Antworten:

24

Ich denke, das Beste, was Sie mit nativen Excel-Funktionen erreichen können, ist Speichern unter | Formatierter Text (durch Leerzeichen getrennt) (* .prn) . Es werden automatisch die Breiten ermittelt und Leerzeichen eingefügt, um diese nach Bedarf aufzufüllen.

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

Squillman
quelle
3
Nur um etwas Klarheit zu schaffen, werden die Breiten "automatisch" basierend auf der Breite bestimmt, die Sie für Ihre Spalten angeben. Während sich die Maße normalerweise (soweit ich mich erinnere) an ems annähern, werden sie beim Exportieren in eine PRN-Datei mit fester Breite wörtlich genommen und abgerundet, um ganzzahlige Werte für die Anzahl der Zeichen in einer Spalte der PRN-Datei zu erhalten. Leerzeichen werden zum Auffüllen nach links oder rechts hinzugefügt, abhängig von der Ausrichtung in den Zellen. Standardmäßig werden also Zahlen nach links aufgefüllt, um sie nach rechts zu zwingen, Text nach rechts, um nach links zu zwingen. Wenn Sie jedoch die Ausrichtung geändert haben, werden sie angezeigt anders)
AdamV
Das macht, wonach ich gesucht habe. Vielen Dank!
RationalGeek
1
Bitte beachten Sie: Formatierter Text (.prn) ist in Excel support.microsoft.com/kb/249885
iokevins
Um das Makro zu verwenden, auf das iokevins zeigt, müssen Sie "& delimiter" an den beiden Stellen entfernen, an denen CellText definiert ist. Andernfalls wird ein zusätzlicher Speicherplatz für jede Zelle hinzugefügt, was beim Speichern als PRN nicht möglich ist.
Farrenthorpe
14

Wenn Sie über Office Professional verfügen, können Sie Ihre Excel-Datei in Access öffnen und anschließend aus Access exportieren. In Access können Sie ein Layout mit fester Breite für Ihre exportierte Datei festlegen und die Breite äußerst detailliert steuern.

davidcl
quelle
Während Access dies tun könnte, wird Excel das tun, wonach gefragt wurde.
AdamV
7
Vielen Dank für die Ablehnung, aber ich fand es erwähnenswert, dass Access eine Vollversion dieser Funktion hat. In Excel können Sie Spaltenbreiten nicht direkt angeben, in Access jedoch. Ja, Sie können die richtigen Spaltenbreiten in Excel erhalten, indem Sie mit den Spaltenbreiten im Arbeitsblatt herumspielen. Aber das ist ein Problem, und es lohnt sich nicht, wenn Sie regelmäßig Dateien mit fester Breite erstellen müssen. Wenn Sie Zugang haben (was viele Leute tun), gibt es einen viel besseren Weg.
Davidcl
Ausgezeichnet; Vielen Dank für diese Alternative: o)
iokevins
5

Wow, ich wollte diese Frage selbst stellen, aber sie wurde bereits gestellt. Die gesamte Ausgabe der Excel-Zwischenablage ist tabstandardmäßig begrenzt. Dies ist ärgerlich für "echte" Nur-Text-Ausgaben, wenn Sie eine Schriftart mit fester Breite haben, aber nicht unbedingt Tabulator-Trennzeichen unterstützen.

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

187712 201 37 0,18   
2525 580 149 0,25   
136829 137 43 0,31   

Hier ist der Makrocode. Stellen Sie zur Verwendung sicher, dass Sie die Registerkarte Entwickler in den Excel-Optionen aktivieren, wenn Sie Excel 2007 oder höher 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
Jeff Atwood
quelle
4

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

dkusleika
quelle
Das hat bei mir super geklappt. Ich formatiere auch gerne alles als Text, bevor ich das mache. Auf diese Weise bleiben alle Daten beim Speichern ausgerichtet.
Gary Brunton
2

Erweitere die Antwort von Jeff Atwood, da ich dort keinen Kommentar abgeben würde:

Ich habe sein Makro geändert, um die Spaltenbreite auf die breiteste Zelle in dieser Spalte einzustellen und jede Spalte mit einer eigenen Breite zu versehen. Sein Makro fand nur die breiteste Zelle in der ersten Zeile und stellte dann die Breite aller Spalten darauf ein.

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
Peter
quelle
0

Das ist ein Mörder für mich. Es gibt auch einige Optionen.

http://www.sensefulsolutions.com/2010/10/format-text-as-table.html

sancho.s Setzen Sie Monica wieder ein
quelle
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier einzuschließen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verlinkte Seite ändert.
Ramhound
2
@ Ramhound - Im Allgemeinen stimme ich zu. In diesem Fall kann ich hier nichts kopieren. Auf dieser Website fügen Sie Ihre Eingabedaten ein und erhalten eine "Excel-formatierte" Ausgabe. Wenn der Link ungültig wird, ist der Dienst nicht mehr verfügbar.
sancho.s Reinstate Monica
Der Service ist umgezogen: senseful.github.io/web-tools/text-table , und der Quellcode ist verfügbar: github.com/senseful/web-tools
ngm
Das ist wieder umgezogen zu: senseful.github.io/text-table
Chris
0

Dies funktioniert mit Access out of the box: https://support.office.com/de-de/article/export-data-to-a-text-file-f72dfc38-a8a0-4c5b-8c2c-bf2950814140#bmsteps So habe ich es ganz einfach und schnell geschafft - besser als mit Excel. In meinem Fall war es eine Konvertierung der Tabelle.

Alex
quelle
Sieht so aus, als hätten Sie Ihre Antwort auf die falsche Frage gepostet ;-) Diese Frage bezieht sich auf Excel, während Ihre Antwort sich auf Access bezieht. Auch für zukünftige Antworten: Das Bereitstellen des Links als Referenz ist nützlich, Sie müssen jedoch auch die wesentlichen Informationen in den Beitrag aufnehmen.
robinCTS