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

126138
RationalGeek

Excel verfügt über die Funktion zum Importieren von Textdateien mit fester Breite. Dort wird ein Dialogfeld angezeigt, in dem Sie auswählen können, wo die Anfangs- und Endpunkte der Felder in Spalten eingefügt werden.

Verfügt es auch über eine Funktionalität, bei der Sie bei einer vorhandenen Kalkulationstabelle in eine Textdatei mit fester Breite exportieren können ?

Wenn ja, wie kann ich darauf zugreifen? Ich habe versucht, "Speichern unter" zu verwenden und "Textdatei" auszuwählen, aber es scheint nur als Tabulatorzeichen zu speichern, was mir nicht weiterhilft.

Dies ist Excel 2003, wenn es darauf ankommt.

22

7 Antworten auf die Frage

23
squillman

Ich denke, die beste Funktion, die Sie mit der nativen Excel-Funktionalität erreichen können, ist Speichern unter | Formatierter Text (durch Leerzeichen getrennt) (* .prn) . Die Breiten werden automatisch bestimmt und Leerzeichen eingefügt, um diese Breite bei Bedarf aufzufüllen.

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

Nur um etwas Klarheit zu schaffen, wird die Breite "automatisch" bestimmt, basierend auf der Breite, die Sie für Ihre Spalten festlegen. Während die Messungen normalerweise (soweit ich mich erinnere) annähernd ems sind, werden sie beim Exportieren in fester Breite prn 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 (dh, standardmäßig werden Zahlen auf der linken Seite aufgefüllt, um sie nach rechts zu zwingen, Text nach rechts, um nach links zu erzwingen. Wenn Sie jedoch die Ausrichtung geändert haben, werden sie übernommen anders) AdamV vor 14 Jahren 3
Das macht, was ich gesucht habe. Vielen Dank! RationalGeek vor 14 Jahren 0
Bitte beachten Sie: Der formatierte Text (.prn) ist in Excel auf http://support.microsoft.com/kb/249885 auf 240 Zeichen pro Zeile begrenzt iokevins vor 12 Jahren 1
Um das Makro zu verwenden, auf das iokevins zeigt, müssen Sie "& Trennzeichen" an den beiden Stellen entfernen, an denen CellText definiert ist. Andernfalls wird für jede Zelle ein zusätzlicher Speicherplatz hinzugefügt, was beim Speichern nicht möglich ist. farrenthorpe vor 9 Jahren 0
12
davidcl

Wenn Sie über Office Professional verfügen, können Sie Ihre Excel-Datei in Access öffnen und dann aus Access exportieren. Mit Access können Sie ein Layout mit fester Breite für Ihre exportierte Datei festlegen und erhalten äußerst detaillierte Steuerelemente für die Angabe dieser Breiten.

Während Access dies tun kann, wird auch Excel nachgefragt. AdamV vor 14 Jahren 0
Vielen Dank für das Downvote, aber ich dachte, es lohnt sich zu erwähnen, dass Access eine Vollversion dieser Funktion hat. In Excel können Sie die Spaltenbreite nicht direkt angeben. Ja, Sie können die richtigen Spaltenbreiten in Excel ermitteln, indem Sie sich mit den Spaltenbreiten im Arbeitsblatt beschäftigen. Dies ist jedoch ein Problem, und wenn Sie Dateien mit fester Breite regelmäßig erstellen müssen, ist dies die Zeit nicht wert. Wenn Sie Zugang haben (was viele Leute tun), gibt es einen viel besseren Weg. davidcl vor 14 Jahren 6
Ausgezeichnet; Danke für diese Alternative: o) iokevins vor 12 Jahren 0
5
Jeff Atwood

Wow, ich wollte diese Frage selbst stellen, aber sie wurde schon gestellt. Alle Excel-Zwischenablage-Ausgaben sind tabstandardmäßig begrenzt. Dies ist etwas ärgerlich für die Ausgabe von "echtem" Klartext, wenn Sie eine Schriftart mit fester Breite haben, aber nicht unbedingt eine Unterstützung für Tabulatorzeichen.

Jedenfalls habe ich ein kleines Excel-Makro gefunden und geändert, das den aktuell ausgewählten Bereich als einfache ASCII-Tabelle mit Spalten mit fester Breite kopiert.

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

Hier ist der Makrocode. Stellen Sie 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 
4
dkusleika

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 feste Breite.

Das hat gut für mich funktioniert. Ich mag es auch, alles als Text zu formatieren, bevor ich dies tue. Auf diese Weise bleiben alle Daten beim Speichern ausgerichtet. Gary Brunton vor 11 Jahren 0
2
Peter

Auf Jeff Atwoods Antwort eingehen, da ich mich nicht dazu äußern würde:

Ich habe sein Makro geändert, um die Spaltenbreite auf die breiteste Zelle in dieser Spalte festzulegen und jede Spalte ihre eigene Breite zu haben. Sein Makro hat nur die breiteste Zelle in der ersten Zeile gefunden und dann die Breite aller Spalten darauf festgelegt.

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
sancho.s

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

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

Obwohl dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. Ramhound vor 9 Jahren 0
@ Ramhound - Im Allgemeinen stimme ich zu. Aber in diesem Fall kann ich hier nichts kopieren. Diese Website ist ein Ort, an dem Sie Ihre Eingabedaten einfügen und "Excel-formatierte" Ausgaben erhalten. Wenn der Link ungültig wird, ist der Dienst nicht mehr verfügbar. sancho.s vor 9 Jahren 2
Der Dienst wurde umgezogen: https://senseful.github.io/web-tools/text-table/. Die Quelle ist verfügbar: https://github.com/senseful/web-tools ngm vor 8 Jahren 0
Was wieder umgezogen ist nach: https://senseful.github.io/text-table/ Chris vor 7 Jahren 0
0
Alex

Es arbeitet mit Zugang aus dem Kasten heraus : https://support.office.com/en-ie/article/export-data-to-a-text-file-f72dfc38-a8a0-4c5b-8c2c-bf2950814140#bmsteps mit diesem So habe ich es ganz einfach und schnell managaed - besser als mit Excel. In meinem Fall war es eine Konvertierung der Tabelle.

Sieht aus, als hätten Sie Ihre Antwort auf die falsche Frage gepostet ;-) Diese Frage fragt nach Excel, während Ihre Antwort über Access spricht. Auch für zukünftige Antworten: Die Bereitstellung des Links als Referenz ist hilfreich, aber Sie müssen auch [die wesentlichen Informationen] (// meta.stackoverflow.com/q/8259) in den Beitrag einfügen. robinCTS vor 6 Jahren 0