web-dev-qa-db-fra.com

Exporter une feuille de calcul Excel en fichier texte de largeur fixe?

Excel a la fonctionnalité d'importer des fichiers texte de largeur fixe dans lequel il présente une boîte de dialogue vous permettant de choisir l'emplacement du début et de la fin des champs à insérer dans les colonnes.

At-il également une fonctionnalité où, étant donné une feuille de calcul existante, vous pouvez exporter vers un fichier texte à largeur fixe?

Si oui, comment puis-je y accéder? J'ai essayé d'utiliser Enregistrer sous et de choisir le fichier texte, mais il semble que l'enregistrement ne soit séparé que par des tabulations, ce qui ne m'aide pas.

Ceci est Excel 2003 si cela compte.

23
RationalGeek

Je pense que le plus proche de la fonctionnalité native d'Excel est Enregistrer sous | Texte formaté (délimité par des espaces) (* .prn) . Il déterminera automatiquement les largeurs et insérera des espaces pour couvrir cette largeur si nécessaire.

Au-delà de cela, vous devez disposer d'une macro ou d'un autre complément qui vous permettra de faire plus.

23
squillman

Si vous avez Office Professionnel, vous pouvez ouvrir votre fichier Excel dans Access, puis Exporter à partir de Access. Access vous permettra de spécifier une disposition de largeur fixe pour votre fichier exporté et vous donnera des contrôles extrêmement granulaires pour spécifier ces largeurs.

13
davidcl

Wow, j'allais poser cette question moi-même, mais c'était déjà demandé. Toutes les sorties du presse-papiers Excel sont tab délimité par défaut. C'est un peu gênant pour une sortie "réelle" en texte brut lorsque vous avez une police de largeur fixe mais pas nécessairement un support de délimiteur de tabulation.

Quoi qu’il en soit, j’ai trouvé et modifié une petite macro Excel qui copiera la région actuellement sélectionnée sous la forme d’un tableau simple à colonnes de largeur fixe ASCII - comme suit:

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

Voici le code de macro. Pour l'utiliser, assurez-vous que activez l'onglet Développeur dans les Options Excel si vous utilisez Excel 2007 ou une version ultérieure.

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
5
Jeff Atwood

Commencez par formater vos données en tant que Courier New (ou une autre police de largeur fixe). Puis enregistrez sous .prn et vous obtiendrez une vraie largeur fixe.

4
dkusleika

En développant la réponse de Jeff Atwood, car elle ne me laisserait pas commenter:

J'ai modifié sa macro pour définir la largeur de la colonne sur la cellule la plus large de cette colonne et donner à chaque colonne sa propre largeur. Sa macro n'a trouvé que la cellule la plus large de la première ligne, puis a défini la largeur de toutes les colonnes.

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
2
Peter

Cela fonctionne avec un accès immédiat: https://support.office.com/en-ie/article/export-data-to-a-text-file-f72dfc38-a8a0- 4c5b-8c2c-bf2950814140 # bmsteps De cette façon, je l'ai manipulé assez facilement et rapidement - mieux qu'avec Excel. Dans mon cas, c'était une conversion de la table.

0
Alex

C'est un tueur pour moi. Il a aussi quelques options.

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

0
sancho.s