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

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

Advertisement

Excel a la fonctionnalité d'importer des fichiers texte de largeur fixe où il présente un dialogue qui vous permet de choisir où se trouvent le début et la fin des champs qu'il met en colonnes.

Dispose-t-il également d'une fonctionnalité qui permet, à partir d'une feuille de calcul existante, d’“exporter” vers un fichier texte de largeur fixe ?

Si oui, comment puis-je y accéder ? J'ai essayé d'utiliser “Save As” et de choisir “Text File”, mais il semble que l'enregistrement se fasse uniquement par tabulation, ce qui ne m'aide pas.

Il s'agit d'Excel 2003 si cela compte.

Advertisement
Advertisement

Réponses (7)

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

Je pense que le plus proche que vous pouvez obtenir de la fonctionnalité native d'Excel est Save As | Formatted Text (Space Delimited) (*.prn). Il déterminera automatiquement les largeurs et insérera des espaces à insérer à cette largeur si nécessaire.

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

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

Si vous avez Office Professional, vous pouvez ouvrir votre fichier Excel dans Access, puis l'exporter à partir de 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.

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

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 délimitées par des tabulations par défaut. C'est un peu ennuyeux pour une “vraie” sortie de texte brut 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 copie la région actuellement sélectionnée sous la forme d'un simple tableau ASCII de colonnes à largeur fixe – comme ça :

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

Voici le code de la Macro. Pour l'utiliser, assurez-vous que vous 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
4
4
4
2010-01-25 21:12:44 +0000

Tout d'abord, formatez vos données en Courier New (ou une autre police à largeur fixe). Ensuite, enregistrez-les au format .prn et vous obtiendrez une véritable largeur fixe.

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

Je développe la réponse de Jeff Atwood, car il ne m'a pas permis de faire de commentaires à ce sujet :

J'ai modifié sa macro pour fixer la largeur de la colonne à 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 dans la première ligne et lui a ensuite fixé 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
0
0
0
2015-05-28 08:21:09 +0000

C'est un tueur pour moi. Il a aussi quelques options. http://www.sensefulsolutions.com/2010/10/format-text-as-table.html

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

Il 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 cette méthode, je l'ai géré assez facilement et rapidement - mieux qu'avec Excel. Dans mon cas, il s'agissait d'une conversion du tableau.

Advertisement

Questions connexes

4
8
5
2
1
Advertisement