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

Een Excel-spreadsheet exporteren naar een tekstbestand met een vaste breedte?

Excel heeft de functionaliteit om tekstbestanden met een vaste breedte te importeren, waarbij een dialoogvenster wordt gepresenteerd waarin u kunt kiezen waar de begin- en eindpunten van velden zijn die het in kolommen plaatst.

Heeft Excel ook een functie waarmee je een bestaande spreadsheet kunt exporteren naar een tekstbestand met een vaste breedte?

Zo ja, hoe krijg ik daar toegang toe? Ik heb geprobeerd met Opslaan als en kies Tekstbestand, maar het lijkt alleen op te slaan als Tab-delimited, wat me niet helpt.

Dit is Excel 2003 als het iets uitmaakt.

Antwoorden (7)

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

Ik denk dat je met Opslaan als | Opgemaakte tekst (spatievrij) (*.prn) het dichtst in de buurt komt van de oorspronkelijke Excel-functionaliteit. Het zal automatisch de breedtes bepalen en spaties invoegen om tot die breedte op te vullen indien nodig.

Daarbuiten heb je een macro of een andere invoegtoepassing nodig waarmee je meer kunt doen.

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

Als u Office Professional hebt, kunt u uw Excel-bestand openen in Access en vervolgens exporteren vanuit Access. Met Access kun je een vaste breedte opgeven voor je geëxporteerde bestand, en het geeft je zeer granulaire mogelijkheden om die breedte op te geven.

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

Wow, ik was van plan deze vraag zelf te stellen, maar hij was al gesteld. Alle Excel klembord uitvoer is standaard tab delimited. Dit is nogal vervelend voor “echte” platte tekst uitvoer wanneer je een vaste breedte font hebt maar niet noodzakelijkerwijs tab delimiter ondersteuning.

Hoe dan ook, ik heb een kleine Excel Macro gevonden en aangepast die de huidig geselecteerde regio kopieert als een eenvoudige ASCII tabel met kolommen met een vaste breedte – zoals dit:

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

Hier is de Macro code. Om deze te gebruiken moet u het tabblad Ontwikkelaar in Excel Opties inschakelen als u Excel 2007 of later gebruikt.

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

Formatteer eerst uw gegevens als Courier New (of een ander lettertype met vaste breedte). Sla dan op als .prn en je krijgt echte vaste breedte.

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

Ik ga verder op het antwoord van Jeff Atwood, aangezien ik daar geen commentaar kon geven:

Ik heb zijn macro aangepast om de kolombreedte in te stellen op de breedste cel in die kolom en om elke kolom zijn eigen breedte te geven. Zijn macro vond alleen de breedste cel in de eerste rij en stelde vervolgens de breedte van alle kolommen daarop in.

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

Dit is een killer voor mij. Het heeft ook een paar opties. http://www.sensefulsolutions.com/2010/10/format-text-as-table.html

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

Het werkt met Access out of the box: https://support.office.com/en-ie/article/export-data-to-a-text-file-f72dfc38-a8a0-4c5b-8c2c-bf2950814140#bmsteps op deze manier heb ik het vrij gemakkelijk en snel gemanaged - beter dan met Excel. In mijn geval was het een conversie van de tabel.