Exporter une feuille de calcul Excel vers un fichier texte à largeur fixe?

24

Excel a la fonctionnalité d'importer des fichiers texte à largeur fixe où il présente une boîte de dialogue qui vous permet de choisir où les débuts et les fins des champs sont placés dans les colonnes.

A-t-il également des fonctionnalités où, compte tenu d'une feuille de calcul existante, vous pouvez exporter vers un fichier texte à largeur fixe?

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

C'est Excel 2003 si cela compte.

RationalGeek
la source

Réponses:

24

Je pense que le plus proche que vous pouvez obtenir des fonctionnalités natives 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 remplir à cette largeur si nécessaire.

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

squillman
la source
3
Juste pour ajouter un peu de clarté - il déterminera "automatiquement" les largeurs en fonction de la largeur que vous spécifiez pour vos colonnes. Bien que normalement les mesures se rapprochent des ems (pour autant que je m'en souvienne), lors de l'exportation vers une largeur fixe prn, elles sont prises littéralement et arrondies vers le bas pour donner des valeurs entières utilisées pour le nombre de caractères dans une colonne du fichier prn. Des espaces sont ajoutés pour le remplissage, à gauche ou à droite en fonction de l'alignement dans les cellules (donc par défaut, les nombres seront remplis à gauche pour les forcer à droite, le texte à droite pour forcer à gauche, mais si vous avez modifié les alignements, ils seront différent)
AdamV
Cela fait ce que je cherchais. Merci!
RationalGeek
1
Remarque: le texte formaté (.prn) est limité à 240 caractères par ligne dans le support
Excel.microsoft.com/kb/249885
Pour utiliser la macro pointée par iokevins, vous devez supprimer "& delimiter" des deux endroits où CellText est défini. Sinon, il ajoutera un espace supplémentaire pour chaque cellule, ce que l'enregistrement en tant que prn ne fait pas.
farrenthorpe
14

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

davidcl
la source
Bien qu'Access puisse le faire, il en sera de même d'Excel, ce qui a été demandé.
AdamV
7
Merci pour le downvote, mais j'ai pensé qu'il valait la peine de mentionner qu'Access a une version complète de cette fonctionnalité. Excel ne vous permet pas de spécifier directement la largeur des colonnes, Access le fait. Oui, vous pouvez obtenir les bonnes largeurs de colonne dans Excel en trafiquant avec les largeurs de colonne dans la feuille de calcul, mais c'est difficile et en tant que personne qui doit créer régulièrement des fichiers à largeur fixe, cela ne vaut pas le temps. Si vous avez accès (ce que beaucoup de gens font), il y a une bien meilleure façon.
davidcl
Excellent; merci pour cette alternative: o)
iokevins
5

Wow, j'allais poser cette question moi-même mais elle a déjà été posée. Toutes les sorties du presse-papiers Excel sont tabdélimitées par défaut. C'est un peu gênant pour une sortie de texte brut "réelle" lorsque vous avez une police à largeur fixe mais pas nécessairement la prise en charge du 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 simple tableau ASCII à colonnes de largeur fixe - comme ceci:

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

Voici le code macro. Pour l'utiliser, assurez-vous d' activer 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
Jeff Atwood
la source
4

Tout d'abord, formatez vos données comme Courier New (ou une autre police à largeur fixe). Enregistrez ensuite au format .prn et vous obtiendrez une vraie largeur fixe.

dkusleika
la source
Cela a très bien fonctionné pour moi. J'aime aussi tout formater en texte avant de le faire. De cette façon, toutes les données sont alignées à gauche lors de l'enregistrement.
Gary Brunton
2

Développant la réponse de Jeff Atwood, car cela ne me laisserait pas commenter là-bas:

J'ai modifié sa macro pour définir la largeur de colonne sur la cellule la plus large de cette colonne et pour que chaque colonne ait sa propre largeur. Sa macro n'a trouvé que la cellule la plus large de la première ligne, puis lui 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
Peter
la source
0

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

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

sancho.s Réintègre Monica
la source
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien de référence. Les réponses de lien uniquement peuvent devenir invalides si la page liée change.
Ramhound
2
@Ramhound - En général, je suis d'accord. Mais dans ce cas, il n'y a rien que je puisse copier ici. Ce site Web est un endroit où vous collez vos données d'entrée et vous obtenez une sortie "au format Excel". Si le lien devient invalide, le service a disparu.
sancho.s Réintègre Monica le
Le service a déménagé: senseful.github.io/web-tools/text-table , et la source est disponible: github.com/senseful/web-tools
ngm
Qui a de nouveau déménagé: senseful.github.io/text-table
Chris
0

Cela fonctionne avec Access out of the box: https://support.office.com/en-ie/article/export-data-to-a-text-file-f72dfc38-a8a0-4c5b-8c2c-bf2950814140#bmsteps avec ce comme je l'ai managé assez facilement et rapidement - mieux qu'avec Excel. Dans mon cas, c'était une conversion de la table.

Alex
la source
On dirait que vous avez posté votre réponse sur la mauvaise question ;-) Cette question concerne Excel, tandis que votre réponse parle d'Access. Aussi pour les réponses futures: Fournir le lien de référence est utile, mais vous devez également inclure les informations essentielles dans le message.
robinCTS